При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.
Proguard запускается после компиляции исходного кода и получения
.class
файлов, но до конвертации в dex.Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.
Входные точки программы задаются в файлах конфигурации правилом
-keep
. Android Gradle Plugin генерирует дефолтный файл c правилами для сохранения базовых компонент и специфичных для андроида классов, таких как View
.Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей
ClassNotFoundException
при использовании Proguard.Для сохранения таких компонентов нужно добавить правила
-keep
в файл конфигурации.После сборки приложения с Proguard, генерируется файл
usage.txt
, в котором хранится список всех удаленных компонентов.