#android #android-proguard
#Android #android-proguard
Вопрос:
Заголовок подводит итог — мое приложение имеет одинаковый размер, установленный на устройстве с Proguard и без него, а APK имеет одинаковый размер на диске. Я разархивировал APK, и на файлы dex приходится около 72% его, поэтому сокращение должно иметь значительный эффект (если я не использую каждый класс и метод из каждой зависимости, которую я включил, что маловероятно). Я использую файл стандартных правил плюс один из моих собственных с несколькими правилами сохранения.
Файл Gradle:
release {
signingConfig signingConfigs.release
zipAlignEnabled true
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
proguard-rules.pro
:
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepattributes Signature
-keepattributes Exceptions
Я думал, что будет много информации об этой проблеме, но, насколько я могу судить, почти ничего.
Комментарии:
1. Я не уверен, сколько у вас других зависимостей, но если вы делаете — сохраните все классы модернизации, не похоже, что вы пытаетесь свести к минимуму. github.com/square/okhttp/issues/2230#issuecomment-236068544 Возможно, вы сводите к минимуму другие зависимости, которых я здесь не вижу.
2. Есть много других зависимостей. Я просто скопировал эти правила из документации по модернизации.
3. согласен с @Emma, какие еще зависимости у вас есть? Вам нужны другие правила для других зависимостей.
4. Зачем мне нужны правила для других зависимостей? Не будет ли ProGuard удалять неиспользуемый код по умолчанию, если в правиле не указано иное?
Ответ №1:
minifyEnabled true
: он запускает ProGuard
shrinkResources true
: он удаляет ресурсы, которые ProGuard помечены как неиспользуемые.
При удалении ненужных файлов из вашего DEX размер вашего APK также уменьшается.
Комментарии:
1.
shrinkResources
очевидно, что это для ресурсов, но ProGuard должен «минимизировать» APK, удалив неиспользуемый код. Он этого не делает.
Ответ №2:
Используйте proguard-android-optimize.txt
, а не proguard-android.txt
в качестве базового файла конфигурации proguard.
Первый настраивает как запутывание, так и оптимизацию, в то время как последний настраивает только запутывание.
Комментарии:
1. Он примерно того же размера
proguard-android-optimize.txt
, что и .2. Кроме того, если у вас есть
-dontoptimize
какие-либо конфигурации, это не позволяет запустить оптимизатор.