Изменение поведения Proguard после обновления gradle, исключает классы из встроенного apk

#android #android-gradle-plugin #proguard

Вопрос:

Несколько дней назад я обновил плагин Gradle в своем проекте Android Studio, обновление было выполнено с 3.3.2 до 4.2.1

С этого момента поведение ProGuard немного изменилось, библиотеки, которые были включены в apk-файл выпуска, теперь из него исключены,

Единственное упоминание о недостающих классах в ProGuard выглядит следующим образом (показан один пример)::

 -dontwarn org.apache.log4j.**
-dontnote org.apache.log4j.**
 

Конечно, если я добавлю

-keep org.apache.log4j.**

или

-keep public class org.apache.log4j.xx {}

Это решит проблему и добавит библиотеку в apk-версию,

Похоже, что dontwarn или «- dontnote » указывал ProGuard включить эти библиотеки в apk-файл выпуска?

Нужно ли мне добавлять -keep во все библиотеки/классы, которые раньше имели -dontwarn и «- dontnote » в моем файле конфигурации ProGuard?

Вызвало ли обновление gradle такое изменение поведения?

Заранее спасибо

Ответ №1:

Похоже, что dontwarn или «-dontnote» указывали ProGuard включить эти библиотеки в apk-версию релиза?

Нет, они просто сказали Прогарду, чтобы он не жаловался вам на проблемы, связанные с org.apache.log4j.** этим . В противном случае они не влияют на то, что делает Proguard.

Это в основном полезно, если у вас есть система сборки, которая рассматривает предупреждения как ошибки, поэтому проблемы с внешней зависимостью не затрагивают ваш проект.

Мне нужно добавить-сохранить во все библиотеки/классы, которые раньше имели-предупреждение и «- примечание » в моем конфигурационном файле ProGuard?

Ну, это один из способов сделать что-то, но это не лучший. Обычно Proguard/R8 (новая замена proguard в плагине Android Gradle) достаточно умен, чтобы понять, какие части ваших зависимостей используются, и не удалять их. Здесь этого не происходит, и, возможно, было бы неплохо выяснить, почему, чтобы вы не увеличивали размер своего приложения.

Большим виновником является использование отражения, и в этом случае вы должны использовать аннотации, чтобы помочь proguard сохранить их. https://www.guardsquare.com/manual/configuration/examples#annotated

Вызвало ли обновление gradle такое изменение поведения?

Иногда, да. Proguard и R8, как и многие другие инструменты, со временем улучшают свою функциональность. Это приводит к изменениям в поведении, которые иногда приводят к трудностям в развитии. Хотя плохо, что ваше приложение больше не компилируется хорошо, вероятно, хорошо, что инструменты пытаются быть более агрессивными в раздевании.