Uso la libreria TinyBus per inviare eventi nella mia app. MinSDK è 15, l'SDK di compilazione è 23.Come evitare java.lang.NoClassDefFoundError: android/os/PersistableBundle su pre-L?
Su dispositivi pre-21, sto affrontando il problema che sembra interessare molte app che usano la riflessione. Appena provo a registrare sul bus nella mia base Activity
classe (che eredita dalla AppCompatActivity
), ottengo il seguente registro blocchi:
E/AndroidRuntime: java.lang.NoClassDefFoundError: android/os/PersistableBundle
E/AndroidRuntime: at java.lang.Class.getDeclaredMethods(Native Method)
E/AndroidRuntime: at java.lang.Class.getPublicMethodsRecursive(Class.java:955)
E/AndroidRuntime: at java.lang.Class.getMethods(Class.java:938)
E/AndroidRuntime: at de.halfbit.tinybus.impl.ObjectsMeta.<init>(ObjectsMeta.java:58)
E/AndroidRuntime: at de.halfbit.tinybus.TinyBus.processQueue(TinyBus.java:346)
E/AndroidRuntime: at de.halfbit.tinybus.TinyBus.register(TinyBus.java:178)
E/AndroidRuntime: at com.package.name.activities.InitializedActivity.onStart(InitializedActivity.java:62)
E/AndroidRuntime: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1166)
E/AndroidRuntime: at android.app.Activity.performStart(Activity.java:5264)
E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2047)
E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2099)
E/AndroidRuntime: at android.app.ActivityThread.access$600(ActivityThread.java:138)
E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:4929)
E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
So che questo errore è causato da Dalvik non riuscendo a inizializzare un classe che non può trovare nel file dex
. C'è un sacco di informazioni e domande relative a questo problema (poiché riguarda anche Otto e altri), ma finora ho visto solo una soluzione: rimuovere l'uso di PersistableBundle
dall'app. Tuttavia, Non faccio riferimento alloPersistableBundle
in nessun punto del mio codice, ma il sistema sembra apparentemente.
C'è qualche altra soluzione nota al problema?
Usi proguard? – fisher3421
@ fisher3421 sry per aver perso tempo, ha già trovato l'errore (più o meno stupido) (vedi la mia risposta). Sì, ho lavorato molto con proguard config per un bel po ', il problema non era legato a questo, anche se – Droidman
http://stackoverflow.com/questions/17973970/how-to-solve-java-lang-noclassdeffounderror/ 41669190 # 41669190 cerca la mia risposta a questo post. – Michael