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.

Другие вопросы по тегам