Proguard с Autovalue
Я только начал использовать AutoValue, но я не могу заставить его работать с Proguard. У меня есть около 6000+ предупреждений, которые выглядят так
Предупреждение:autovalue.shaded.com.google.common.auto.common.MoreElements$1: не удается найти суперкласс или интерфейс javax.lang.model.util.SimpleElementVisitor6
На самом деле ошибки показывают это...
Ошибка: не удалось выполнить задачу ':transformClassesAndResourcesWithProguardForDebug'. java.io.IOException: Пожалуйста, сначала исправьте вышеупомянутые предупреждения.
Как я могу решить эту проблему?
1 ответ
Исправление
Это происходит, так как вы добавили библиотеку как 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. Если вы используете AutoValue в чистом модуле библиотеки Java, используйте конфигурацию compileOnly, добавленную в Gradle 2.12.
Объяснение
AutoValue - это библиотека, которая генерирует код для вас. Ваше единственное взаимодействие с самой библиотекой должно осуществляться через @AutoValue
аннотации, которые имеют RetentionPolicy.SOURCE
- т.е. они доступны только в вашем исходном коде, а не в скомпилированном коде.
Это означает, что ваш скомпилированный код не имеет никакого отношения к коду библиотеки AutoValue. Таким образом, нет необходимости компилировать его с вашим кодом - это код, на котором работает ProGuard.