Я думаю, вы итак в курсе, что размер приложения – важный фактор взаимодействия с пользователем. А если вы пишете библиотеку или SDK, то это ОЧЕНЬ важный фактор!
Кстати, у меня точно пару раз было так, что я отказывалась от загрузки приложения, увидев, сколько оно весит. Хорошо, что есть несколько эффективных способов сжать и оптимизировать размер apk или aar и регистрации и смс.
💚 Анализ
project/build/outputs/apk/debugТут вы можете найти свою сборку и проанализировать ее. Вам нужно проверить наличие больших файлов. Постарайтесь заменить
png на svg, в Android Studio есть для этого инструмент Asset Studio.💚 R8 и Proguard
Теперь R8 используется по-умолчанию, когда вы включаете минификацию в файле
build.gradle. Но это не значит, что он лучше. У R8 и ProGuard есть свои плюсы и минусы, но это уже отдельная история. Вы можете заменить R8 на ProGuard:android.enableR8=false
android.enableR8.libraries=false
Размер приложения может существенно уменьшиться (на 20-40% от исходного). Пользователь скажет вам спасибо. Для агрессивной оптимизации вы можете попробовать
android.enableR8.fullMode = trueЛично я больше доверяю Proguard до сих пор, потому что знаю как он работает, доводилось хорошенько покопаться в его коде.
💚 Удаление неиспользуемых ресурсов
Если ваше приложение работает только на английском, вы можете сделать
resConfigs "en" в defaultConfig и gradle удалит все остальные языки, чтобы минимизировать размер сборки. Кстати, этот хак можно использовать чтобы ускорить сборку дебага, если в вашем приложении слишком много ресурсов на разных языках, а дебажить вы хотите только на одном. 💚 App Bundle
Бандлы – это подписанные zip-файлы, которые упорядочивают код и ресурсы приложения в модули. Из этих модулей Google Play генерирует apk, которые предоставляются пользователям:
apk, configuration apks, dynamic feature apks.
Так что ваши пользователи получат только то, что нужно для их устройства, а не полный набор ресурсов, которые вы запихнули в приложение при разработке, чтобы оно выглядело красиво на любом устройстве.
Вообще, я думаю, что загрузка фич по требованию – революционная. Пользователь загружает приложение нормального размера и может расширить по требованию его функциональность, ведь иногда так хочется запихнуть в приложение десять разных метрик, а еще вон ту жирную либу, которую притащил бизнес 😉