Как исключить зависимость процессора аннотаций от ProGuard
Я получил предупреждение ProGuard при попытке создать релиз моего проекта Android, который мешает успешному завершению сборки.
Предупреждение: класс библиотеки com.google.googlejavaformat.java.filer.FormattingJavaFileObject$1$1 расширяет или реализует класс программы com.google.common.io.CharSink
После небольшого копания и бега gradlew :app:dependencies
Я обнаружил, что google-java-format был включен, потому что он используется AutoFactory, которая была недавно добавлена в проект.
+--- com.google.auto.factory:auto-factory:1.0-beta5
| +--- com.google.auto:auto-common:0.6 (*)
| +--- com.google.auto.value:auto-value:1.1 -> 1.3
| +--- com.google.googlejavaformat:google-java-format:1.1
Автозавод включен только в мой build.gradle
файл в качестве аннотации Processor, поэтому я не понимаю, почему он даже обрабатывается ProGuard.
provided "com.google.auto.factory:auto-factory:1.0-beta5"
annotationProcessor "com.google.auto.factory:auto-factory:1.0-beta5"
Я пытался добавить -dontwarn com.google.gooogleformat.**
к моему файлу конфигурации ProGuard, показывающему, что библиотека используется только во время генерации кода и фактически не требуется для выпуска. Это не имело никакого эффекта.
Я также посмотрел на интерактивную справку, но мне не ясно, как указать эту зависимость как -libraryjars
файл как предложено.
Как настроить файл конфигурации приложения ProGuard или его build.gradle
файл, чтобы ProGuard не захлебнулся этой библиотекой? Если это имеет значение, я просто использую ProGuard для удаления неиспользуемого кода и не выполняю никаких действий по запутыванию.
2 ответа
Мы вновь обратились к этой проблеме после обновления до Android Studio 3.0 с плагином Android 3.0.0 Gradle и Gradle 4.1. Теперь кажется, что добавление следующего к proguard-rules.pro
решает проблему:
-dontwarn com.google.googlejavaformat.**
-dontwarn com.google.common.**
Глядя на мой оригинальный вопрос, кажется, что мы, вероятно, опечатали пространство имен для com.google.googlejavaformat
когда изначально пытался решить эту проблему.
// Auto factory for Assisted Injection
annotationProcessor "com.google.auto.factory:auto-factory:${libs.autoFactoryVersion}"
provided "com.google.auto.factory:auto-factory:${libs.autoFactoryVersion}"