我使用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.(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时仔细查看生成的内容.