2012-02-06 25 views
7

Googleマップを使用するアプリケーションを開発しています。署名されたアプリケーションパッケージをエクスポートするまで、アプリは正常に動作します。コードが難読化された後、マップはロードされなくなります。私はProGuardにはかなり新しいです、私はproguard.cfgを修正しようとしましたが、まったく何も働いていません。それは、マップのAPIキーで最も可能性の高い問題であるEclipseのProGuard難読化の後にGoogleマップが読み込まれない

-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

+0

はい、私は古いデバッグキーを使用していました。どうもありがとうございました。 –

答えて

9

: は、ここで私が試したの異なるものの一部です。あなたは、アプリケーションをエクスポートする際に使用された署名を使用してキーを生成し、マップビューで使用する必要があります。
ProGuardを使用するObfuscationがマップのレンダリングに影響することはほとんどありません。

13

編集:具体的にAndroidのV2のためにGoogleマップの場合:

誰もこれを見て、同様の問題を持っているだけの場合には

- 私は第2のマップを表示しようとしたとき、Activity Aが持っていたのように私は(ParcelableRuntimeExceptionを得ていましたマップインスタンス、次にActivity B、別のインスタンスを別のパラメータに移動)、私が想定していたものを指しているのは、Googleパッケージの難解なクラス名でした。

私はProGuardの-project.txtすべてに

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

を追加した後、それが役立つかもしれない通常の

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

関連する問題