Android 5.0/5.1系统Chartboost广告崩溃问题解决及AdMob中介程序化禁用Chartboost方案咨询
我之前也碰到过Chartboost在Android 5.0/5.1(Lollipop)上触发VerifyError崩溃的情况,给你两个方向的解决方案,优先尝试修复崩溃,如果实在解决不了,再用程序化方式禁用Chartboost中介。
方案一:修复Chartboost在Lollipop上的崩溃问题
这个错误本质是字节码验证失败,大概率是旧版本适配器的兼容性问题或者代码压缩导致的,试试这几个步骤:
- 升级Chartboost中介适配器版本:你当前用的
com.google.ads.mediation:chartboost:8.2.0.0版本比较老旧,Chartboost后续更新的适配器已经修复了不少低版本系统的兼容性问题。建议升级到Google中介文档里推荐的最新Chartboost适配版本,重新编译测试。 - 调整代码压缩与Desugaring设置:VerifyError经常和D8/R8的代码处理有关,在你的app级
build.gradle里启用核心库desugaring,帮Lollipop系统兼容新的字节码特性:
android { compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' }
同时确保Chartboost的类没有被错误混淆,在混淆规则文件里添加:
-keep class com.chartboost.sdk.** { *; } -keepattributes *Annotation*, InnerClasses
- 检查初始化线程与跟踪功能:崩溃日志指向Chartboost的Tracking模块后台线程,试试在主线程初始化Chartboost相关逻辑,或者关闭Chartboost的调试跟踪功能(如果开启了的话),避免在Lollipop上触发有问题的线程操作。
方案二:程序化禁用Lollipop用户的Chartboost中介
如果上面的修复都没效果,你可以通过代码让AdMob在Lollipop设备上跳过Chartboost广告请求:
在初始化AdMob之后、加载广告之前,过滤掉Chartboost的中介配置:
import android.os.Build; import com.google.android.gms.ads.MobileAds; import com.google.android.gms.ads.MediationConfiguration; import java.util.ArrayList; import java.util.List; // 可以放在Application的onCreate方法,或者广告加载前的初始化逻辑里 if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) { List<MediationConfiguration> originalConfigs = MobileAds.getMediationAdapterConfigurations(); List<MediationConfiguration> filteredConfigs = new ArrayList<>(); for (MediationConfiguration config : originalConfigs) { // 过滤掉所有Chartboost相关的适配器配置 if (!config.getAdapterClassName().toLowerCase().contains("chartboost")) { filteredConfigs.add(config); } } // 应用过滤后的配置,AdMob就不会给Lollipop用户请求Chartboost广告了 MobileAds.setMediationAdapterConfigurations(filteredConfigs); }
这个方法会动态修改AdMob的中介配置,确保Lollipop用户的广告请求只会分发到其他兼容的广告网络。
内容的提问来源于stack exchange,提问作者Ильин Павел
相关产品推荐
相关产品推荐

