sag*_*gis 11 android admob facebook-audience-network android-workmanager
Google AdMob Ads 库版本 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)
Run Code Online (Sandbox Code Playgroud)
该异常出现在 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
在这个问题上有一个类似的问题,但它似乎是无关的(较旧的Android操作系统版本具有多个dex,而这里是单个dex和较新的操作系统版本)。
目前我降级到 AdMob 19.4.0,其中不包含 WorkManager 依赖项。
更新(2020.12.18)
Didn't find class "com.facebook.ads.AudienceNetworkContentProvider"在某些 Android 10 设备上。Chi*_*orn 22
从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>
Run Code Online (Sandbox Code Playgroud)
或者
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)
解决方法: 手动初始化 WorkManager不会导致此异常。
AdMob 20.5.0 及更高版本(或 WorkManager 2.6.0+ 的显式依赖项)
WorkManager 现在使用应用程序启动提供程序。为了使用手动初始化:
步骤 1: 有 2 种方法可以从应用程序启动提供程序中删除 WorkManager:
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
Run Code Online (Sandbox Code Playgroud)
或者
<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.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
Run Code Online (Sandbox Code Playgroud)
步骤2: 在Application对象中添加手动WorkManager配置:
class MyApplication extends Application implements Configuration.Provider {
@NonNull
@Override
public Configuration getWorkManagerConfiguration() {
return new Configuration.Builder()
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
AdMob 20.4.0 及更低版本
通过将以下内容添加到以下内容来删除 WorkManager 默认内容提供程序初始化Manifest.xml:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove"
android:exported="false"
/>
Run Code Online (Sandbox Code Playgroud)
将 WorkManager 的手动初始化添加到Application.onCreate()方法中:
Configuration myConfig = new Configuration.Builder()
.build();
WorkManager.initialize(this, myConfig);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7549 次 |
| 最近记录: |