2012-02-06 11 views
7

Rozwijam aplikację korzystającą z map google. Aplikacja działa poprawnie, dopóki nie wyeksportuję podpisanego pakietu aplikacji. Po tym jak kod został zaciemniony, mapy nie są już ładowane. Jestem całkiem nowym użytkownikiem ProGuard, próbowałem modyfikować program proguard.cfg, ale nic nie zadziałało. Oto kilka różnych rzeczy, które próbowałem:Mapy Google nie są ładowane po wykryciu ProGuard w środowisku Eclipse

-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 

Dzięki

+1

Masz klucz API Map Google z podpisem używanym podczas exporu Ting? może to nie być problem z zaciemnianiem. Może to być problem z kluczem Map API. – Karthik

+0

Tak, miałeś rację, użyłem mojego starego klucza debugowania. Bardzo ci dziękuję. –

Odpowiedz

9

Jest to najprawdopodobniej problem z Maps API Key. Powinieneś wygenerować klucz z podpisem używanym podczas eksportowania aplikacji i używać go w widoku mapy.
Jest mało prawdopodobne, aby Obfuskacja przy użyciu ProGuarda wpłynęła na renderowanie mapy.

13

Edit: Na Mapach Google dla Androida V2 szczególności:

wszelki wypadek ktoś widzi to i ma podobny problem - ja dostaję ParcelableRuntimeException gdy próbowałem wyświetlić drugą mapę (jak w, Activity A miał wystąpienie mapy, a następnie przeniesienie do Activity B, innej instancji z różnymi parametrami), wskazując na to, co zakładałem, że jest zaciemnioną nazwą klasy w pakiecie google.

po dodaniu

-keep class com.google.android.gms.maps.** { *; } 
-keep interface com.google.android.gms.maps.** { *; } 

do mojego PROGUARD-project.txt wszystko wydawało się nadal pracować jak normalny

0

To może pomóc:

-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(); 
} 

Źródło: https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/proguard-rules.pro

Powiązane problemy