Как исключить зависимость процессора аннотаций от 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}"
Другие вопросы по тегам