升级AdMob至23.4.0+后Release构建触发R8缺失类错误求解决方案
解决AdMob 23.4.0+版本Release构建时R8缺失类的问题
针对升级AdMob SDK到23.4.0及以上版本后,Release构建触发R8缺失android.media.LoudnessCodecController及其内部类的错误,除降级外,可采用以下两种可行方案:
方案1:添加R8保留规则(推荐)
在应用模块的proguard-rules.pro文件中添加以下规则,告诉R8忽略缺失类的警告并保留相关定义:
# 适配AdMob SDK引用的缺失系统类 -dontwarn android.media.LoudnessCodecController -dontwarn android.media.LoudnessCodecController$OnLoudnessCodecUpdateListener -keep class android.media.LoudnessCodecController { *; } -keep interface android.media.LoudnessCodecController$OnLoudnessCodecUpdateListener { *; }
添加后重新执行Release构建即可,该方案精准针对问题类,不会影响其他混淆规则。
方案2:全局关闭R8缺失类检测(激进方案)
若方案1无效,可在项目根目录的gradle.properties中添加以下配置,让R8遇到缺失类时不终止构建:
android.r8.failOnMissingClasses=false
注意:此配置会屏蔽所有缺失类的错误提示,可能掩盖其他潜在问题,仅建议在确认无其他依赖缺失时使用。
问题背景
该错误源于AdMob SDK 23.4.0+的内部代码com.google.android.gms.internal.ads.zzsp引用了仅在部分Android系统版本中存在的LoudnessCodecController类,R8在混淆时检测到类缺失并终止构建,且23.5.0、23.6.0版本仍存在此问题。
复现步骤
- 创建默认配置的新Android项目
- 在app模块的
build.gradle.kts中,设置android.buildTypes.release.isMinifyEnabled = true,并添加依赖api("com.google.firebase:firebase-ads:23.4.0")(或更高受影响版本) - 在Build Variants中切换构建类型为Release
- 执行Build → Build App Bundle(s)/APK(s) → Build Bundle(s),构建将失败并触发相同错误
内容的提问来源于stack exchange,提问作者sagis
相关产品推荐
相关产品推荐

