首页 > 解决方案 > 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)

标签: androidadmobandroid-workmanagerfacebook-audience-network

解决方案


Google 文档版本开始2.6.0-alpha01WorkManager用于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" />

推荐阅读