2012-02-06 51 views
7

我正在开发一个使用Google地图的应用程序。该应用程序正常工作,直到我导出已签名的应用程序包。代码被混淆后,地图不再加载。我对ProGuard相当陌生,我尝试过修改proguard.cfg,但是迄今为止没有任何工作。 这里有一些我已经尝试了不同的东西:Google地图在Eclipse中的ProGuard混淆处理后未加载

-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

您是否拥有使用expor时使用的签名的Maps API密钥婷?它可能不是混淆的问题。这可能是Map API密钥的问题。 – Karthik 2012-02-06 10:14:45

+0

是的你是对的我正在使用我的旧调试密钥。非常感谢你。 – 2012-02-06 11:42:12

回答

9

它与地图API密钥最有可能的问题。您应该在导出应用程序时使用签名生成密钥并在地图视图中使用它。
使用ProGuard进行混淆不会影响地图渲染。

13

编辑:对于谷歌地图Android版V2具体做法是:

万一有人看到这一点,也有类似的问题 - 我得到一个ParcelableRuntimeException当我试图查看第二个地图(如,Activity A有一个地图实例,然后移动到Activity B,另一个实例具有不同的参数),指向我所假设的是谷歌包中的混淆类名。

我加入后

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

我proguard的-project.txt一切似乎都保持工作正常

0

它可以帮助:

-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