EclipseのProGuard Obfuscationの後にGoogleマップが読み込まれない

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

-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

ありがとう

7
エクスポート中に使用された署名付きのMaps APIキーがありますか?それは難読化の問題ではないかもしれません。 Map APIキーで問題になる可能性があります。
追加された 著者 Karthik,
はい、私は古いデバッグキーを使用していました。どうもありがとうございました。
追加された 著者 Ana-Maria Curca,

3 答え

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

誰かがこれを見て、似たような問題を抱えている場合、2番目のマップを表示しようとしたときに Parcelable RuntimeException /code>はマップインスタンスを持っていましたが、 Activity B 、異なるパラメータを持つ別のインスタンスに移動しました)、私が想定していたものを指してgoogleパッケージの難読クラス名でした。

私が追加した後

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

私のproguard-project.txtには、すべて正常に動作するように見えました

13
追加された

Maps API Key の問題である可能性が最も高いです。アプリをエクスポートする際に使用された署名を使用してキーを生成し、マップビューで使用する必要があります。
ProGuardを使用するObfuscationがマップレンダリングに影響することはほとんどありません。

9
追加された

それは助けるかもしれない:

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

Source: https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/proguard-rules.pro

0
追加された