#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, как и многие другие инструменты, со временем улучшают свою функциональность. Это приводит к изменениям в поведении, которые иногда приводят к трудностям в развитии. Хотя плохо, что ваше приложение больше не компилируется хорошо, вероятно, хорошо, что инструменты пытаются быть более агрессивными в раздевании.