Карты 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