2012-02-06 12 views
7

में ProGuard Obfuscation के बाद लोड नहीं किए गए हैं, मैं एक ऐप विकसित कर रहा हूं जो Google मानचित्र का उपयोग करता है। जब तक मैं हस्ताक्षरित ऐप पैकेज निर्यात नहीं करता तब तक ऐप ठीक काम करता है। कोड को खराब करने के बाद नक्शे अब लोड नहीं होते हैं। मैं ProGuard के लिए काफी नया हूं, मैंने proguard.cfg को संशोधित करने का प्रयास किया है लेकिन अब तक कुछ भी काम नहीं किया है। यहां विभिन्न चीजें हैं जो मैं कोशिश की है में से कुछ हैं:Google मानचित्र 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 

धन्यवाद

+1

क्या आपको एक्सपोजर के दौरान उपयोग किए गए हस्ताक्षर के साथ मैप्स एपीआई कुंजी मिल गई है टिंग? यह obfuscation के साथ एक मुद्दा नहीं हो सकता है। यह मैप एपीआई कुंजी के साथ समस्या हो सकती है। – Karthik

+0

हाँ आप सही थे मैं अपनी पुरानी डीबग कुंजी का उपयोग कर रहा था। आपका बहुत बहुत शुक्रिया। –

उत्तर

9

यह मैप्स एपीआई कुंजी साथ सबसे अधिक संभावना मुद्दा है। ऐप को निर्यात करते समय उपयोग किए गए हस्ताक्षर के साथ आपको कुंजी उत्पन्न करनी चाहिए और इसे अपने मानचित्र दृश्य में उपयोग करना चाहिए।
यह संभावना नहीं है कि ProGuard का उपयोग करके Obfuscation मानचित्र प्रतिपादन को प्रभावित करेगा।

13

संपादित करें: एंड्रॉयड V2 विशेष रूप से के लिए गूगल मैप्स के लिए:

शायद ज़रुरत पड़े किसी को भी इस देखता है और वही समस्या है - मैं एक ParcelableRuntimeException हो रही थी जब मैं एक दूसरे नक्शे को देखने की कोशिश की (के रूप में, Activity A था एक नक्शा उदाहरण, फिर Activity B पर जाकर, अलग-अलग पैरा के साथ एक और उदाहरण), जो मैं मान रहा था उसे इंगित करना Google पैकेज में एक obfuscated कक्षा का नाम था।

बाद मैं जोड़ा

-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