我使用TinyBus库在应用程序中调度事件。 MinSDK是15,编译SDK是23。
在21之前的设备上,我面临的问题似乎会影响许多使用反射的应用程序。一旦我尝试在基础Activity
类(继承自AppCompatActivity
)中在总线上注册,就会得到以下崩溃日志:
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)
我知道此错误是由dalvik未能初始化在
dex
文件中找不到的类引起的。有很多与此问题相关的信息和问题(因为它也会影响Otto和其他问题),但到目前为止,我只看到一个解决方法:从应用程序中删除PersistableBundle
的用法。但是,我在代码中的任何地方都没有引用 PersistableBundle
,但是系统显然可以引用。是否有其他已知的解决方法?
最佳答案
好了,这个问题现在已经解决了。浏览完我所有的代码(我应该很久以前已经做过)之后,我发现我实际上已经引用了PersistableBundle
。这些位于我让IDE生成的方法(如onPostCreate(PersistableBundle bundle)
),并且没有引起注意。将所有PersistableBundle
替换为Bundle
可以解决此问题。
对于有类似问题的人,我只能建议在使用较新的API时仔细查看生成的内容。
关于java - 如何避免NoClassDefFoundError : android/os/PersistableBundle on pre-L?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34085681/