首页 > 解决方案 > R8 不支持 applyMapping 吗?

问题描述

使用 applyMapping 会导致编译异常,比如:

R8: 'boolean readField(int)' already has a mapping

FAILURE:构建失败并出现异常。

我的 Android Gradle Plugin 的版本是 3.5.3,我发现是 R8 的问题。因为当禁用 R8 时,applyMapping 工作正常,启用 R8,它将不起作用。我喜欢 R8 生成的 Mapping.txt 有这样的重复方法:</p>

1:1:boolean readField(int):0 -> a
2:2:boolean readField(int):0:0 -> a

如果删除其中一个,它将正常工作。

标签: androidandroid-gradle-pluginproguardandroid-r8

解决方案


您使用的是旧版本的 R8,它过于急切地在映射文件中报告错误。尝试通过将以下内容添加到顶级 build.gradle 文件来使用旧版本:

构建脚本 {

repositories {
    maven {
        url 'http://storage.googleapis.com/r8-releases/raw'
    }
}

dependencies {
    classpath 'com.android.tools:r8:1.6.60'          // Must be before the Gradle Plugin for Android.
    classpath 'com.android.tools.build:gradle:X.Y.Z' // Your current AGP version.
 }

}

这应该有助于解决您的问题。


推荐阅读