8

我刚刚开始使用 AutoValue,但无法使其与 proguard 一起使用。我有大约 6000 多个类似这样的警告

警告:autovalue.shaded.com.google.common.auto.common.MoreElements$1:找不到超类或接口 javax.lang.model.util.SimpleElementVisitor6

实际上的错误表明了这一点......

错误:任务“:transformClassesAndResourcesWithProguardForDebug”执行失败。java.io.IOException: 请先更正上述警告。

我该如何解决这个问题?

4

1 回答 1

12

修复

发生这种情况是因为您已将该库添加为项目的compile依赖项。像这样的东西:

dependencies {
    compile 'com.google.auto.value:auto-value:1.2'
}

您需要使库成为provided依赖项:

dependencies {
    provided 'com.google.auto.value:auto-value:1.2'
}

注意:provided配置由 Android Gradle 插件提供。如果您在纯 Java 库模块中使用 AutoValue,请使用Gradle 2.12 中添加的compileOnly配置。

说明

AutoValue 是一个为您生成代码的库。您与库本身的唯一交互应该通过@AutoValue注释,它们具有RetentionPolicy.SOURCE- 即它们仅在您的源代码中可用,而不是在编译代码中。

这意味着您编译的代码与 AutoValue 库代码没有任何联系。因此,它不需要使用您的代码进行编译 - 这是 ProGuard 运行的代码。

于 2016-07-08T10:50:27.087 回答