5

हमें उस सामग्री को स्टोर और पुनर्प्राप्त करने की आवश्यकता है जो उपयोगकर्ता हमारे ऐप के साथ ऑनलाइन उत्पन्न करते हैं। ऐसा करने के लिए, हमने एपीआई (आधिकारिक उपयोग उदाहरण here) को त्वरित रूप से बनाने के लिए एंड्रॉइड स्टूडियो के एकीकृत Google क्लाउड एंडपॉइंट टेम्पलेट का उपयोग करने का निर्णय लिया।एंड्रॉइड स्टूडियो के Google क्लाउड एंडपॉइंट्स टेम्पलेट का उपयोग करते समय प्रोगार्ड कॉन्फ़िगरेशन

यह डीबग में ठीक काम करता है, लेकिन रिलीज मोड में, प्रोगार्ड सक्षम के साथ, यह विफल हो जाता है। इससे भी बदतर, मैं एंड्रॉइड स्टूडियो के एंडपॉइंट्स टेम्पलेट्स के साथ प्रोगार्ड का उपयोग करने के बारे में कोई दस्तावेज या नमूने नहीं ढूंढ पाया।

या आसपास poking और यह काम करने की कोशिश कर के इतने एक घंटे के बाद, proguard-rules.pro अब इस तरह दिखता है:

-keep class com.google.api.** { public *; } 
-dontwarn com.google.api.** 
-keep class com.google.common.** { public *; } 
-dontwarn com.google.common.** 

# Not allowed to post company and app names, but this line is correct in the real file 
-keep class com.companyname.appname.application.backend.** { *; } 
इस कॉन्फ़िगरेशन के साथ

, मैं एक वर्ग डाली हो रही है मेरी ArrayAdapter में अपवाद:

java.lang.ClassCastException: com.google.api.client.util.ArrayMap cannot be cast to com.companyname.appname.application.backend.messageApi.model.Message 

यह एक Message की List वस्तुओं के बजाय लगता दिए गए डेटा की रूपांतरण कहीं नहीं किया जाता है और,, मैं एकमिलवस्तुओं के(वे वैसे भी वैध डेटा रखते हैं)।

मैं जांच कर सकता हूं कि ऐप रिलीज मोड में चल रहा है या नहीं, मैन्युअल रूप से रूपांतरण करें, हालांकि, यह एक हैकी तरीका है और मैं इसे ठीक से करना पसंद करूंगा। तो, क्या कोई मुझे बता सकता है कि प्रोगुआर्ड कॉन्फ़िगरेशन फ़ाइल में मुझे क्या याद आ रहा है?

उत्तर

17

मैं अपने ऐप्स में से एक में एंडपॉइंट्स के साथ समान चीजें करता हूं। मुझे प्रोगुआर्ड के साथ कुछ समस्याएं थीं (बिल्कुल याद नहीं कर सकती)।

मेरी Proguard नियमों के इस खंड लागू लगता है:

# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection 
-keepclassmembers class * { 
    @com.google.api.client.util.Key <fields>; 
} 
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault 

अगर यह आवश्यक है मैं नहीं जानता, लेकिन मैं यह भी इस खंड है:

# Play Services 
-dontwarn com.google.android.gms.** 
-dontwarn com.google.common.cache.** 
-dontwarn com.google.common.primitives.** 
-keep class * extends java.util.ListResourceBundle { 
    protected Object[][] getContents(); 
} 
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 
-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

आशा है कि यह मदद करता है।

+5

आपके द्वारा पोस्ट किए गए पहले भाग में वास्तव में सही समाधान है। – Manvis

+2

ग्रेट, प्रतिक्रिया के लिए धन्यवाद। – myanimal

+0

पहला खंड मेरे जीवन को बचाया गया है !! बहुत धन्यवाद! – KimKha

संबंधित मुद्दे