升级Google Play Services至12.0.1后AdMob出现java.lang.VerifyError求助
嗨,我之前处理过类似的问题,从调用栈里的com.google.android.gms.ads相关类来看,这个java.lang.VerifyError大概率是升级到12.0.1版本后,广告模块的代码混淆、依赖冲突或者缓存问题导致的。给你几个亲测有效的解决方案:
修正混淆规则
报错的o.a是混淆后的类名,应该是Google Ads相关的类没被正确保留。打开你的proguard-rules.pro文件,添加以下混淆规则:-keep class com.google.android.gms.ads.** { *; } -keep class com.google.android.gms.common.** { *; } -keep class com.google.android.gms.tasks.** { *; }还要注意不要误删Google官方推荐的混淆配置,如果你用了AndroidX相关组件,也要确保混淆规则同步更新。
彻底清理并重建项目
缓存残留很容易导致依赖不兼容,按这个流程操作:- 点击Android Studio顶部菜单栏的
Build->Clean Project - 接着选择
Build->Rebuild Project - 也可以手动删除项目根目录下的
.gradle文件夹和模块内的build文件夹,再重新同步项目
- 点击Android Studio顶部菜单栏的
统一所有Google Play Services依赖版本
一定要确保项目中所有Google Play Services相关的依赖版本完全一致,比如同时用到广告、认证模块的话,都要指定12.0.1:implementation 'com.google.android.gms:play-services-ads:12.0.1' implementation 'com.google.android.gms:play-services-auth:12.0.1'混合不同版本的依赖会导致字节码冲突,触发验证错误。
检查minSdkVersion配置
Google Play Services 12.0.1对最低SDK版本有要求,确保你模块的build.gradle中minSdkVersion不低于16,如果之前设置的版本更低,需要调整后重新编译。关闭Android Studio即时运行
即时运行有时候会生成不完整的字节码,导致验证失败。关闭路径:File->Settings->Build, Execution, Deployment->Instant Run,取消所有勾选的选项,重启IDE后再重建项目。
如果以上方法都没解决,你可以先暂时降级回11.8.0版本保证业务正常,同时查看Google Play Services的官方Release Notes,确认12.0.1版本有没有已知的兼容性问题。
内容的提问来源于stack exchange,提问作者sagis

