android - AssertionError in Gson EnumTypeAdapter when using Proguard Obfuscation -


मेरी परियोजना के लिए serialization / deserialization के दौरान एक TypeAdapter में Gson लागू करता है वस्तु के बहुरूपता राज्य को संरक्षित करना किसी भी तरह, यह परियोजना विकास परीक्षणों के दौरान ठीक काम करती है, लेकिन जब यह छद्म अस्पष्टता के साथ जारी हो जाता है और परीक्षण किया जाता है, तो यह केवल क्रैश होता है।

  03-21 10: 06: 53.632 : ई / AndroidRuntime (12441): गंभीर अपवाद: मुख्य अक्टूबर 03-21: 06: 53.632: ई / AndroidRuntime (12441): java.lang.AssertionError 03-21 अक्टूबर: 06: 53.632: ई / AndroidRuntime (12441): में com.google.gson.internal.bind.TypeAdapters $ EnumTypeAdapter & LT; init & gt; (sourcefile: 724)। अक्टूबर 03-21: 06: 53.632: ई / AndroidRuntime (12441): com.google.gson.internal.bind पर। TypeAdapters $ 26.create (SourceFile: 753) 03-21 10: 06: 53.632: E / AndroidRuntime (12441): com.google.gson.Gson.getAdapter पर (स्रोतफ़ाइल: 353) 03-21 10: 06: 53.632: ई / AndroidRuntime (12441): com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1. करें & lt पर; init & gt; (sourcefile: 82) 03-21 अक्टूबर: 06: 53.632: ई / AndroidRuntime (12441): com.google पर। Gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField (स्रोतफ़ाइल: 81) 03-21 10: 06: 53.632: ई / एंड्रॉइडरेंटाइम (12441): com.google.gson.intern पर al.bind.ReflectiveTypeAdapterFactory.getBoundFields (sourcefile: 118) 03-21 10: 06: 53.632: ई / AndroidRuntime (12441): पर com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create (sourcefile: 72) 03-21 10: 06: 53.632: E / AndroidRuntime (12441): com.google.gson.Gson.getAdapter पर (स्रोतफ़ाइल: 353) 03-21 10: 06: 53.632: ई / एंड्रॉइड रेंटाइम (12441): com.google.gson पर .Gson.toJson (स्रोतफ़ाइल: 578) 03-21 10: 06: 53.632: ई / एंड्रॉइड रेंटाइम (12441): com.google.gson.Gson.toJsonTree पर (स्रोतफ़ाइल: 47 9) 03-21 10: 06: 53.632: ई / AndroidRuntime (12441): पर com.google.gson.Gson.toJsonTree (sourcefile: 458) अक्टूबर 03-21: 06: 53.632: ई / AndroidRuntime (12441): com.google.gson.Gson $ 3.serialize पर (sourcefile : 137)   

मेरा जीएसएन विशिष्ट प्रोटूवार्ड कॉन्फ़िगरेशन है:

  ## --------------- आरंभ करें: जीएसएन के लिए प्रोगुर्ड कॉन्फ़िगरेशन ---------- # फ़ील्ड के साथ काम करते समय जीएसएन जेनेरिक प्रकार की जानकारी को क्लास फ़ाइल में संग्रहीत करता है Proguard # ऐसी सूचना को डिफ़ॉल्ट रूप से निकालता है, इसलिए इसे सभी को रखने के लिए इसे कॉन्फ़िगर करें रखरखाव हस्ताक्षर # जीएसओएन के उपयोग के लिए, एक्सपोज़ एनोटेशन -कैतट्यूमेंट्स * एनोटेशन * # जीएसन विशिष्ट क्लासेस -keep क्लास सन.एमिस.यूएनसाफ {*; } # -keep वर्ग com.google.gson.stream। ** {*; } # अनुप्रयोग कक्षाएं जिन्हें सीएसआईएल / जीएसएन-केप वर्ग com.google.gson.examples.android.model पर serialized / deserialized किया जाएगा। ** {*; } # यह अतिरिक्त है - मेरे द्वारा जेसन ओब्स्बुसेकेशन -keep क्लास com.google.gson को बाहर करने के लिए जोड़ा गया। ** {*; } ## --------------- अंत: Gson के लिए proguard कॉन्फ़िगरेशन ----------   

TypeAdapter मैं इसका उपयोग कर रहा हूं:

  सार्वजनिक अंतिम श्रेणी GsonWorkshiftAdapter JsonSerializer का उपयोग करता है & lt; IWorkshift & gt ;, JsonDeserializer & lt; IWorkshift & gt; {निजी स्थिर अंतिम स्ट्रिंग CLASSNAME = "CLASSNAME"; निजी स्थिर अंतिम स्ट्रिंग INSTANCE = "INSTANCE"; @ ओवरराइड सार्वजनिक जेएसनएलेमेंट सीरियललाइज़ (IWorkshift स्रोत, प्रकार प्रकार ओफ़एसआरसी, जेसनसीरायलाइजेशन कॉन्टैक्ट संदर्भ) {स्ट्रिंग क्लासनाम = एसआरसी.गेट क्लास ()। GetCanonicalName (); जेसनईलेमेंट एएमएम = संदर्भ। साइरियलाइज़ (एसआरसी); JsonObject retValue = नया JsonObject (); RetValue.addProperty (CLASSNAME, क्लासनाम); RetValue.add (INSTANCE, एएमएम); रिटर्न रेट वेल्यू; } @Override सार्वजनिक IWorkshift deserialize (JsonElement json, प्रकार typeOfT, JsonDeserializationContext संदर्भ) JsonParseException {JSONObject JSONObject = json.getAsJsonObject () फेंकता है; जेसन प्रिमिटिक प्राइम = (जेएसन प्रमीमित) jsonObject.get (CLASSNAME); स्ट्रिंग क्लासनाम = prim.getAsString (); कक्षा के & lt;? & Gt; क्लास = नल; {Klass = Class.forName (className) कोशिश करें; } पकड़ (क्लासनोटफौन्डएक्सेप्शन ई) {नई जेसनपर्स एक्सपैशन (ई.गास्ट मेसेज ()); } वापसी संदर्भ डीसेरीयलइज़ (jsonObject.get (INSTANCE), क्लेस); }}   

मैंने इस त्रुटि को जीएसओ के लिए विशिष्ट खोज में किया, लेकिन कोई उपयोगी जवाब नहीं मिल सका। हालांकि मुझे इस तरह की समस्या से मिला।

डेवलपर के समुदाय से कोई भी मदद की सराहना की जाएगी।

ऐसा लगता है जैसे हमें एन्यूमरेशन के सदस्यों को रखा जाना चाहिए यह मेरे लिए काम किया है:

  --keepclassmembers enum * {*; }   

या, यदि आप अधिक विशिष्ट होना चाहते हैं, तो

  --keepclassmembers enum com.your.package। ** {*; }    

Comments

Popular posts from this blog

excel vba - How to delete Solver(SOLVER.XLAM) code -

github - Teamcity & Git - PR merge builds - anyway to get HEAD commit hash? -

ios - Replace text in UITextView run slowly -