Размер APK увеличился на 35 МБ при увеличении минимального SDK с 21 до 24 - PullRequest
3 голосов
/ 18 июня 2020

Недавно мы увеличили наш минимально поддерживаемый SDK с API 21 до 24.

Очевидно, это изменение привело к увеличению размера нашего APK с 65 МБ до 103 МБ. Из анализа APK в студии Android мы видим, что это все файлы .so, размер которых практически увеличился вдвое.

Но с чего бы это? Никакие свойства gradle не изменились, только min sdk.

Есть мысли о том, как снова уменьшить размер APK?

Ответы [ 2 ]

1 голос
/ 14 августа 2020

Есть мысли о том, как снова уменьшить размер APK?

Согласно этот ответ на Reddit и эта проблема в системе отслеживания проблем Google это потому, что начиная с API 23 платформа может читать собственные библиотеки, не извлекая их, если они не сжаты.

Если ваш minSdk равен 22 или ниже, они не могут использовать это, потому что на старых устройствах это будет две копии этих библиотек (нераспакованные и извлеченные из APK).

Если вы объявляете minSdk 23 или выше, сборка APK с несжатыми собственными библиотеками должна сэкономить место на устройствах, потому что:

  • APK все равно сжимается перед загрузкой, поэтому размер загрузки не меняется.
  • после установки, есть только одна копия библиотеки (несжатая внутри APK)

Когда я только что это протестировал, размер после установки был фактически больше с minSdk 23 по сравнению с 22, вопреки тому, что они говорят, должно произойти. Это , потому что APK включает библиотеки для всех ABI . Если я использую только один ABI, он немного меньше с minSdk 23. Так что, пока вы не начнете разбивать APK или использовать App Bundle , вы можете установить android:extractNativeLibs="true" в вашем AndroidManifest.xml.

0 голосов
/ 18 июня 2020

Прочтите официальное руководство о Reduce your app size. Чтобы решить проблемы, связанные с apk большого размера, вы можете использовать правила ProGuard.

android {

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

Proguard запутывает ваш код, удаляя неиспользуемый код и переименовывая классы, поля и методы с семантически непонятные имена, которые делают базу кода меньше. В результате получается файл .apk меньшего размера.

Открыть proguard-rules.pro. Добавить правила

ДЕМО

-keep class packageName.** { *; }
-keepclassmembers class packageName.** { *; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...