Карты Google не загружаются после обфускации ProGuard в Eclipse
Я разрабатываю приложение, которое использует карты Google. Приложение работает до тех пор, пока я не экспортирую подписанный пакет приложений. После того, как код был запутан, карты больше не загружаются. Я новичок в ProGuard, я пробовал модифицировать proguard.cfg, но soo далеко ничего не сработало.
Вот некоторые из вещей, которые я пробовал:
-libraryjars C:/Program Files/Android/android-sdk/add-ons/addon-google_apis-google_inc_-10/libs/maps.jar
-keep class android.location.** { *; }
-keepnames class com.google.android.maps.** {*;}
-keep public class com.google.android.maps.** {*;}
-dontwarn com.google.android.maps.GeoPoint
-dontwarn com.google.android.maps.MapActivity
-dontwarn com.google.android.maps.MapView
-dontwarn com.google.android.maps.MapController
-dontwarn com.google.android.maps.Overlay
Спасибо
Ответы
Ответ 1
Скорее всего, это проблема с API-интерфейсом API Карт. Вы должны сгенерировать ключ с сигнатурой, используемой при экспорте приложения, и использовать его в своем виде карты.
Его маловероятно, что Obfuscation с использованием ProGuard повлияет на отображение карты.
Ответ 2
Изменить: для Карт Google для Android V2 В частности:
На всякий случай, если кто-либо видит это и имеет аналогичную проблему - я получал Parcelable
RuntimeException
, когда пытался просмотреть вторую карту (например, Activity A
имел экземпляр карты, а затем перешел на Activity B
, другой экземпляр с разными параметрами), указывая на то, что я предполагал, было обманутым именем класса в пакете google.
после добавления
-keep class com.google.android.gms.maps.** { *; }
-keep interface com.google.android.gms.maps.** { *; }
для моего proguard-project.txt все, казалось, продолжало работать как обычно
Ответ 3
Это может помочь:
-optimizations !code/simplification/variable
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
# The Maps API uses custom Parcelables.
# Use this rule (which is slightly broader than the standard recommended one)
# to avoid obfuscating them.
-keepclassmembers class * implements android.os.Parcelable {
static *** CREATOR;
}
# The Maps API uses serialization.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
Источник:
https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/proguard-rules.pro