将 AdMob 从 23.3.0 升级到 23.4.0 后,我在发布版本期间收到以下错误:
Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in [My project folder]/build/outputs/mapping/release/missing_rules.txt.
还有
Missing class android.media.LoudnessCodecController$OnLoudnessCodecUpdateListener (referenced from: void com.google.android.gms.internal.ads.zzsp.zzd(int) and 1 other context)
Missing class android.media.LoudnessCodecController (referenced from: android.media.LoudnessCodecController com.google.android.gms.internal.ads.zzsp.zzb and 4 other contexts)
已向 Google 报告以下问题: https://groups.google.com/g/google-admob-ads-sdk/c/NXPiDjbT2QE/m/PKKmI-38AwAJ
除了降级到 AdMob 23.3.0 之外还有其他解决方法吗?
更新 - 如何在新的、干净的项目中重现问题:
android
=> buildTypes
=> release
,设置 isMinifyEnabled = true
。dependencies
,添加 api("com.google.firebase:firebase-ads:23.4.0")
Build Variants
中的构建类型设置为 Release
。Build
=> Build App Bundle(s)/APK(s)
=> Build Bundle(s)
。构建将失败并出现相同的错误。
我按照步骤操作,问题是您没有包含
missing_rules.txt
,如错误消息所示,getDefaultProguardFile()
不会为您解决问题。
就我而言
missing_rules.txt
内容是:
# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn android.media.LoudnessCodecController$OnLoudnessCodecUpdateListener
-dontwarn android.media.LoudnessCodecController
现在这是我的情况,您的规则将位于
[app]/build/outputs/mapping/release/missing_rules.txt
。将这些规则复制并粘贴到应用程序的proguard-rules.pro
后,发布版本将会成功。
原因可能是
firebase-ads
引用了一些未包含在源中的类(可以反映到某些google play SDK)。 -dontwarn
用于抑制对丢失源的警告。
正如here所解释的那样,
getDefaultProguardFile()
获取android的默认规则并将它们与proguard-rules.pro
中的规则结合起来,它不会自动添加模块中缺少的规则。