错误:“运行 R8 时检测到缺少类。”使用 AdMob 23.4.0

问题描述 投票:0回答:1

将 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 之外还有其他解决方法吗?

更新 - 如何在新的、干净的项目中重现问题:

  1. 创建一个新的Android项目(全部默认设置)。
  2. 在app模块的build.gradle.kts中:
    1. 部分:
      android
      =>
      buildTypes
      =>
      release
      ,设置
      isMinifyEnabled = true
    2. 部分:
      dependencies
      ,添加
      api("com.google.firebase:firebase-ads:23.4.0")
  3. Build Variants
    中的构建类型设置为
    Release
  4. 从主菜单 -
    Build
    =>
    Build App Bundle(s)/APK(s)
    =>
    Build Bundle(s)

构建将失败并出现相同的错误。

android admob
1个回答
0
投票

我按照步骤操作,问题是您没有包含

missing_rules.txt
,如错误消息所示,
getDefaultProguardFile()
不会为您解决问题。

运行发布构建后,我遇到了同样的错误,导致我遵循规则: location of missing_rules.txt

就我而言

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
中的规则结合起来,它不会自动添加模块中缺少的规则。

© www.soinside.com 2019 - 2024. All rights reserved.