android - ClassNotFoundException:“androidx.work.impl.WorkManagerInitializer”
问题描述
将 Google AdMob 广告库版本 19.4.0 升级到 19.5.0 后,某些设备上出现了一个新异常:
Caused by java.lang.ClassNotFoundException
Didn't find class "androidx.work.impl.WorkManagerInitializer" on path: ...
dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:196)
androidx.core.app.CoreComponentFactory.instantiateProvider (CoreComponentFactory.java)
android.app.ActivityThread.installProvider (ActivityThread.java:7213)
android.app.ActivityThread.installContentProviders (ActivityThread.java:6769)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:941)
该异常出现在搭载 Android 8 和 10 的设备上。
AdMob 库 19.5.0 添加了对 WorkManager 2.1.0 的依赖(通过 Play Services Ads Lite 库): https ://mvnrepository.com/artifact/com.google.android.gms/play-services-ads-lite/19.5.0
关于这个问题有一个类似的问题,但它似乎无关(具有多个 dex 的旧 Android 操作系统版本,而这里是单个 dex 和较新的操作系统版本)。
现在我降级到 AdMob 19.4.0,它不包括 WorkManager 依赖项。
更新(2020.12.18)
- 异常频率为每 1000 台运行 Android 10 的设备中有 1 台。
- 强制 WorkManager 2.4.0(而不是 2.1.0)也会产生异常。
- 该问题与 AdMob 无关。使用 AdMob 19.4.0 将 WorkManager 添加到项目中重现了该问题。
- 我目前的假设是这个问题是由 AudienceNetwork 和 WorkManager 的内容提供者之间的冲突引起的。使用 WorkManager 将 AudienceNetwork 添加到项目会生成相同的异常,但具有不同的类:
Didn't find class "com.facebook.ads.AudienceNetworkContentProvider"
在某些 Android 10 设备上。
解决方案
从Google 文档版本开始2.6.0-alpha01
,WorkManager
用于androidx.startup
初始化 WorkManager。以前,这是由androidx.work.impl.WorkManagerInitializer
如果您过去tools:node="remove"
使用ContentProvider
用于初始化流程生命周期的,那么您需要执行以下操作。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.impl.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
或者
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
推荐阅读
- python - bfs 社交网络算法(图算法)-hackerearth
- java - java中的数组是否相等方法
- c# - 我们可以更改祖父类的方法定义吗?
- three.js - 当我在 Three.js 中使用 EffectComposer 时出现错误的渲染
- java - 使用java将三个json对象合并为一个
- excel - 用新构建的工作簿链接 vba 替换工作簿链接
- android - android.os.TransactionTooLargeException:数据包大小 565156 字节
- swift - Swift:如何检查字符串是否仅包含 URL
- python - 如何连接到pyqt5中的不同类?
- python - Csv 到 json 通过相同的键-python