Android Proguard не сжимается APK

#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 какие-либо конфигурации, это не позволяет запустить оптимизатор.