2015-06-26 15 views
9

मुझे एंड्रॉइड डिवाइसों के लिए एक मल्टीडेक्स प्रोजेक्ट मिला है। मैं फ्लेक्सन का उपयोग करता हूं। मैंने पहले से ही flexjson 3.3 और 2.x के साथ इसका परीक्षण किया है।एंड्रॉइड पर फ्लेक्सजेसन क्लास नॉटफाउंड अपवाद 4.4.4

यह एंड्रॉइड 5.x के साथ पूरी तरह से अच्छी तरह से काम करता है लेकिन एंड्रॉइड 4.4.4 में दुर्घटनाग्रस्त है।

ऐसा लगता है कि डेक्स समर्थन लाइब्रेरी पुरानी एंड्रॉइड संस्करणों के साथ काम नहीं कर रही है लेकिन मैं नहीं बता सकता।

Here's मेरी स्टैकट्रेस: ​​

06-29 03:50:44.763 11884-11884/com.pigdroid.gameboard E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.pigdroid.gameboard, PID: 11884 
    flexjson.JSONException: [ layers.values ]: Could not load com.pigdroid.game.board.tile.model.IntTileLayer 
      at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:250) 
      at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213) 
      at flexjson.ObjectBinder.bind(ObjectBinder.java:92) 
      at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110) 
      at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13) 
      at flexjson.ObjectBinder.bind(ObjectBinder.java:95) 
      at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149) 
      at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25) 
      at flexjson.ObjectBinder.bind(ObjectBinder.java:95) 
      at flexjson.ObjectBinder.bind(ObjectBinder.java:74) 
      at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241) 
      at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301) 
      at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35) 
      at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108) 
      at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692) 
      at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168) 
      at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71) 
      at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159) 
      at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52) 
      at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48) 
      at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118) 
      at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101) 
      at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.pigdroid.game.board.tile.model.IntTileLayer" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib]] 
      at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:497) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:457) 
      at android.app.LoadedApk$WarningContextClassLoader.loadClass(LoadedApk.java:430) 
      at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:243) 
            at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213) 
            at flexjson.ObjectBinder.bind(ObjectBinder.java:92) 
            at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110) 
            at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13) 
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95) 
            at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149) 
            at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25) 
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95) 
            at flexjson.ObjectBinder.bind(ObjectBinder.java:74) 
            at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241) 
            at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301) 
            at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35) 
            at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108) 
            at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692) 
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168) 
            at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71) 
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159) 
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52) 
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48) 
            at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118) 
            at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101) 
            at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118) 
            at android.os.Handler.handleCallback(Handler.java:733) 
            at android.os.Handler.dispatchMessage(Handler.java:95) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
            at dalvik.system.NativeStart.main(Native Method) 

संपादित करें: मैंने एंड्रॉयड देव टीम से किसी समस्या भरा है और they've एक सुविधा के रूप में बग बताया गया है, तब भी जब यह पूरी तरह से अच्छी तरह से काम करता है बाद के संस्करण। किसी भी इस anoying पाया, तो फिर से खोलने के लिए वोट करने के लिए प्रयास करें: https://code.google.com/p/android/issues/detail?id=178607

+0

जब वास्तव में इस कोड का निष्पादित? क्या आप स्टैक ट्रेस का विस्तार कर सकते हैं (दिखाएं कि ऑब्जेक्टबिंडर # bindIntoObject, आदि कौन कॉल करता है)? –

+0

@ एलेक्स लिपोव, मैंने पूरा स्टैकट्रैक जोड़ा है। 'ऑब्जेक्टबिंडर # bindIntoObject' को फ्लेक्स deserializer – eduyayo

+0

ग्रेट द्वारा आंतरिक रूप से बुलाया जाता है। क्या हो रहा है बेहतर समझने के लिए - कौन सा घटक किसी सेवा से कनेक्शन स्थापित करता है (जो HateAIDLConnection $ 3 क्लास के उदाहरण के साथ bindService को कॉल करता है)? क्या यह आवेदन है? गतिविधि? प्रसारण प्राप्तकर्ता? –

उत्तर

1

मैं विधि में नाकाम रहने के ObjectBinder.findClassInMap वे इस तरह कक्षा लोडर पाने के लिए एक नज़र डाली: ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

मैं एक की अगर वहाँ तरह लगता है मल्टी डेक्स क्लास लोडर का खराब इंस्टॉल क्योंकि मैंने अपने deserialization होने से पहले लोडर खुद को सेट किया है और यह समस्या तय की है।

लाइन fixin 'त्रुटि मैं मेरे खेल मॉडल लोड करने से पहले हाल ही में जोड़े इस प्रकार है:

Thread.currentThread().setContextClassLoader(owner.getActivity().getBaseContext().getClassLoader()); 
संबंधित मुद्दे