Налаштування Android App Bundle (AAB) для оптимізації розміру
З серпня 2021 Google Play потребує AAB замість APK для нових програм. Але просто переключити формат збірки з APK на AAB — недостатньо для реального зменшення розміру. Потрібно зрозуміти, як працює Google Play Asset Delivery, налаштувати splits та видалити з base module все, що туди не має попадати.
Як AAB зменшує розмір
APK — один файл для всіх пристроїв. AAB — архів з модулями, з якого Google Play збирає оптимізований APK для конкретного пристрою. Samsung Galaxy S23 з arm64-v8a та xxhdpi екраном отримує лише arm64-v8a нативні бібліотеки та xxhdpi ресурси — без x86, armeabi-v7a та xhdpi/hdpi варіантів.
Розмір завантажуваного APK зменшується в середньому на 15–35% порівняно з universal APK — офіційні дані Google для реальних програм.
Налаштування у build.gradle
android {
bundle {
language { enableSplit = true } // окремий APK під мову
density { enableSplit = true } // окремий APK під щільність екрана
abi { enableSplit = true } // окремий APK під архітектуру CPU
texture {
enableSplit = true
defaultFormat = "ETC2" // базовий формат для Mali/Adreno
// ASTC для флагманів з підтримкою (Adreno 530+, Mali-G51+)
}
}
}
texture splits — особливо важливі для ігор та програм з 3D: ETC2 — universally supported (GLES 3.0+), ASTC — найкраще стиснення на сучасних пристроях, DXT/S3TC — для x86 (ChromeOS). Без texture splits всі формати упаковані разом, може додати +50–100 MB до розміру.
Перевірка розміру через bundletool
bundletool build-apks --bundle=app.aab --output=app.apks \
--ks=keystore.jks --ks-pass=pass:password \
--ks-key-alias=key --key-pass=pass:password
bundletool get-size total --apks=app.apks \
--device-spec=pixel7_spec.json
device-spec.json для конкретного пристрою отримуємо через bundletool get-device-spec --adb=<path>. Це дає точний розмір завантажуваного APK для цільового пристрою ще до завантаження у Play Store.
R8 та ProGuard — обов'язкові спутники AAB
buildTypes {
release {
minifyEnabled = true
shrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
shrinkResources = true працює лише при minifyEnabled = true. Видаляє невикористовувані ресурси — строки, зображення, layout — на основі статичного аналізу коду. У реальних проектах це 5–20 MB додаткового зменшення.
R8 у full mode (не додаємо -dontobfuscate для release) агресивніше видаляє код та інлайнить методи. proguard-android-optimize.txt замість proguard-android.txt включає додаткові оптимізації.
Аналіз розміру через Android Studio
Build → Analyze APK (працює з AAB через розпакування). Показує pie chart: classes.dex, res/, lib/, assets/. Відразу видно що займає найбільше місця. Типові знаходження:
-
assets/з несжатими JSON-файлами даних — сжати або перевести у бінарний формат (Protobuf / FlatBuffers) -
lib/з нативними бібліотеками для всіх ABI включаючиx86таx86_64— залишити лишеarm64-v8aтаarmeabi-v7aдля production build -
res/drawable-*з PNG там де достатньо VectorDrawable
Часові рамки
Налаштування AAB з bundletool-верифікацією — 1–2 дні. Якщо потрібна повна оптимізація розміру включаючи R8 tuning та texture splits — 3–5 днів.







