赞
踩
老项目升级到Android14出现错误:
- java.lang.ExceptionInInitializerError
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore.get(LiveEventBusCore.java:49)
- at com.jeremyliao.liveeventbus.LiveEventBus.get(LiveEventBus.java:35)
- at com.lib.common.ui.base.CommonActivity.initEvent(CommonActivity.kt:53)
- at com.lib.common.ui.base.CommonActivity.onCreate(CommonActivity.kt:29)
- at com.lib.common.ui.activity.DeviceMainActivity.onCreate(DeviceMainActivity.kt:141)
- at android.app.Activity.performCreate(Activity.java:8595)
- at android.app.Activity.performCreate(Activity.java:8573)
- at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
- at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3764)
- at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3922)
- at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
- at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
- at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
- at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
- at android.os.Handler.dispatchMessage(Handler.java:106)
- at android.os.Looper.loopOnce(Looper.java:205)
- at android.os.Looper.loop(Looper.java:294)
- at android.app.ActivityThread.main(ActivityThread.java:8177)
- at java.lang.reflect.Method.invoke(Native Method)
- at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
- at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
- Caused by: java.lang.SecurityException: com.lydsto.robotvacuum: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
- at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
- at android.os.Parcel.createException(Parcel.java:3041)
- at android.os.Parcel.readException(Parcel.java:3024)
- at android.os.Parcel.readException(Parcel.java:2966)
- at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:5684)
- at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1852)
- at android.app.ContextImpl.registerReceiver(ContextImpl.java:1792)
- at android.app.ContextImpl.registerReceiver(ContextImpl.java:1780)
- at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore.registerReceiver(LiveEventBusCore.java:127)
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore.<init>(LiveEventBusCore.java:84)
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore.<init>(LiveEventBusCore.java:39)
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore$SingletonHolder.<clinit>(LiveEventBusCore.java:45)
- at com.jeremyliao.liveeventbus.core.LiveEventBusCore.get(LiveEventBusCore.java:49)
- at com.jeremyliao.liveeventbus.LiveEventBus.get(LiveEventBus.java:35)
根据错误定位到问题是由于使用了一个三方库导致的:
implementation 'com.jeremyliao:live-event-bus:1.7.3'
进一步分析三方库错误原因:
Caused by: java.lang.SecurityException: com.lydsto.robotvacuum: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
错误描述翻译过就是:在注册广播接收器(application.registerReceiver())时需要 指定导出标志 为RECEIVER_EXPORTED 或者 RECEIVER_NOT_EXPORTED;
查看三方库源码进一步确认问题:
确实是没有根据版本判断进行flags赋值,修改后:
问题解决。
总结:Android14 强制要求 注册广播接收器(application.registerReceiver())时需要 指定导出标志 为RECEIVER_EXPORTED 或者 RECEIVER_NOT_EXPORTED。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。