与Autovalue的Proguard

时间:2016-04-05 14:12:20

标签: android proguard android-proguard auto-value

我刚开始使用AutoValue,但我无法使用proguard。我有大约6000多个警告,看起来像这样

  

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

实际错误显示了这个......

  

错误:任务执行失败   ':transformClassesAndResourcesWithProguardForDebug&#39 ;.   java.io.IOException:请先纠正上述警告。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:12)

修复

这是因为您已将库添加为项目的compile依赖项。像这样:

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

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

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

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

解释

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

这意味着您编译的代码与AutoValue库代码无关。因此,它不需要使用您的代码进行编译 - 这是ProGuard运行的代码。