Как уменьшить размер APK и AAB: пошаговое руководство по оптимизации
мая, 27 2026
Представьте ситуацию: пользователь находит ваше приложение в Google Play, но отказывается от установки. Причина банальна - файл слишком тяжелый для его тарифного плана или памяти телефона. Исследования показывают жесткую зависимость: каждые лишние 10 МБ снижают вероятность загрузки на 6%. В мире мобильных приложений вес имеет значение не меньше, чем дизайн или функционал.
Оптимизация пакетов APK (Android Package Kit - традиционный формат установки приложений для Android) и AAB (Android App Bundle - современный формат публикации, генерирующий оптимальные APK под каждое устройство) перестала быть просто технической задачей. Это вопрос выживания продукта на рынке. Если вы разработчик или продакт-менеджер, вам нужно знать, как сократить этот вес без потери качества.
Почему стоит перейти на Android App Bundle (AAB)
Давным-давно мы все использовали APK-файлы. Проблема старого формата проста: он содержит код и ресурсы для всех возможных конфигураций устройств сразу. Пользователю с экраном 5 дюймов и русским языком скачивались ассеты для 7-дюймовых планшетов и китайский перевод. Это пустая трата трафика.
Android App Bundle решает эту проблему архитектурно. Вы загружаете один архив в консоль разработчика, а Google Play сам собирает нужный APK под конкретного пользователя. Этот процесс называется App Thinning. Результат впечатляет: средний размер устанавливаемого пакета сокращается на 15-35% автоматически, без вашего участия в коде.
Переход на AAB обязателен для новых приложений в Google Play с 2021 года, но многие старые проекты всё еще тянут за собой устаревшие APK-сборки. Проверьте свой проект: если вы публикуете APK напрямую, вы теряете до трети потенциальной аудитории из-за избыточного веса.
Минификация кода: ProGuard и R8
В любом приложении есть «мусорный» код: неиспользуемые классы, методы, библиотеки, которые подключены, но никогда не вызываются. Инструменты R8 (современный инструмент минификации и обфускации кода для Android, заменяющий ProGuard) и его предшественник ProGuard делают две вещи: удаляют этот мусор и сокращают имена переменных.
Чтобы включить это в проекте, достаточно добавить флаги в файл build.gradle:
minifyEnabled true- запускает удаление неиспользуемого кода и обфускацию.shrinkResources true- удаляет неиспользуемые ресурсы (изображения, строки), которые не ссыланы из кода.
На практике этот шаг дает сокращение размера APK на 15-30%. В одном из кейсов команда смогла уменьшить пакет с 20.5 МБ до 15.5 МБ только благодаря правильной настройке правил ProGuard. Важно помнить: автоматическое удаление может сломать рефлексию или нативные вызовы. Вам придется написать правила исключения (-keep), чтобы защитить критичные части приложения.
Оптимизация изображений: переход на WebP
Графика - главный враг компактного приложения. Иконки, скриншоты, фоновые картинки занимают львиную долю места. Стандартный формат PNG надежен, но тяжел. Формат WebP (современный формат изображений, поддерживаемый Android, обеспечивающее лучшее сжатие по сравнению с PNG и JPEG) позволяет сохранить то же визуальное качество, но при размере файла на 60-70% меньшем.
Не полагайтесь на автоматические конвертеры в Figma или Zeplin. Лучший результат дает ручной контроль:
- Выберите исходные PNG-изображения в Android Studio.
- Преобразуйте их в WebP через контекстное меню (Right Click -> Convert to WebP).
- Ручная настройка качества: иногда снижение качества с 100% до 85% незаметно глазу, но экономит мегабайты.
- Удалите метаданные: EXIF-данные и комментарии внутри файлов картинок ни к чему в приложении.
Разработчики отмечают, что ручная пропорциональная сжатия пикселей перед конвертацией в WebP дает результаты на 70% лучше, чем полностью автоматические скрипты. Если у вас много простых иконок, замените растровые изображения на Vector Drawables - векторную графику. Она хранится как XML-код инструкций, а не как массив пикселей, что идеально подходит для экранов разной плотности.
Удаление неиспользуемых ресурсов
По мере роста проекта в папках res/ накапливаются файлы, которые больше нигде не используются. Старые версии логотипов, тестовые скриншоты, забытые анимации. Android Studio предоставляет встроенный инструмент для борьбы с этим:
- Перейдите в меню Refactor.
- Выберите пункт Remove Unused Resources.
- Изучите предложенный список и удалите подтвержденные мусорные файлы.
Этот процесс следует проводить регулярно, например, перед каждым крупным релизом. Также обратите внимание на локализации. Если ваше приложение поддерживает 20 языков, но 90% пользователей говорят на русском и английском, рассмотрите возможность загрузки остальных языковых пакетов по требованию.
On-Demand Resources: контент по запросу
Если ваше приложение содержит игры с уровнями, обучающие курсы или медиатеку, нет смысла загружать весь контент сразу. Технология On-Demand Resources (функция Android App Bundle, позволяющая загружать определенные ресурсы приложения только тогда, когда они нужны пользователю) позволяет разбить приложение на модули.
Начальная установка будет содержать только ядро приложения. Остальные ресурсы (например, уровень 5 игры или дополнительный язык) скачаются только в момент обращения к ним. Это может сократить начальный размер установки на 30-60%. Для реализации потребуется настроить модульность в Gradle и пометить ресурсы соответствующими тегами.
Аудит зависимостей и SDK
Каждая библиотека, которую вы добавляете в dependencies, увеличивает вес приложения. Часто разработчики подключают полновесные SDK аналитики или рекламы, хотя нужна лишь легкая версия.
| Тип компонента | Пример | Влияние на размер | Рекомендация |
|---|---|---|---|
| Полный SDK аналитики | Full Firebase SDK | +4-8 МБ | Используйте только нужные модули (Analytics, Crashlytics отдельно) |
| Тяжелые UI-библиотеки | Кастомные View-паки | +3-8 МБ | Замените на нативные компоненты Material Design |
| HTTP-клиенты | Alamofire / OkHttp | +2 МБ | Для простых задач используйте URLSession или нативный HttpUrlConnection |
Проверьте каждую зависимость. Спросите себя: «Нужен ли мне весь функционал этой библиотеки?». Часто можно заменить тяжелый фреймворк на несколько строк нативного кода.
Интеграция контроля размера в CI/CD
Оптимизация - это не разовое действие, а постоянный процесс. Чтобы приложение не раздувалось со временем, внедрите контроль размера в ваш конвейер непрерывной интеграции (CI/CD). Используйте инструменты вроде Firebase App Size Analysis (инструмент мониторинга размера приложения, интегрированный в Firebase Console). Он показывает, как каждая новая сборка влияет на общий вес.
Установите лимиты. Если базовая сборка весит 8 МБ, а новая ветка выдает 12 МБ, сборка должна падать. Это заставит команду обсуждать причины увеличения веса до того, как код попадет в продакшен. Проводите ежемесячные аудиты структуры приложения, чтобы выявлять новые возможности для оптимизации.
Итоговый чек-лист оптимизации
Чтобы получить максимальный эффект, действуйте комплексно:
- [ ] Перейдите на публикацию через Android App Bundle (AAB).
- [ ] Включите
minifyEnabledиshrinkResourcesв release-сборке. - [ ] Конвертируйте все PNG в WebP, удалив метаданные.
- [ ] Замените простые растровые иконки на Vector Drawables.
- [ ] Удалите неиспользуемые ресурсы через Refactor -> Remove Unused Resources.
- [ ] Разбейте контент на On-Demand Resources, если применимо.
- [ ] Аудитните зависимости: оставьте только необходимое.
Комплексное применение этих методов позволило одной из команд сократить размер APK с 20.5 МБ до 8.3 МБ - снижение почти на 60%. При этом использование памяти упало на 70%, а конверсия установок выросла на 15-23%. Помните: каждый сэкономленный байт приближает вас к новому пользователю.
Чем отличается APK от AAB?
APK (Android Package Kit) - это готовый к установке файл, содержащий код и ресурсы для всех типов устройств. AAB (Android App Bundle) - это архив, который вы загружаете в Google Play. Магазин сам создает оптимизированные APK под конкретное устройство пользователя, убирая лишние языки и графические ресурсы, что значительно снижает вес скачиваемого файла.
Насколько эффективно преобразование PNG в WebP?
Конвертация изображений в формат WebP может уменьшить размер графических ресурсов на 60-70%. Это один из самых быстрых способов снизить общий вес приложения, особенно если у вас много скриншотов, иллюстраций и фотографий. Ручная настройка качества и удаление метаданных дают еще больший эффект.
Что такое ProGuard и зачем он нужен?
ProGuard (и его преемник R8) - это инструмент, который удаляет неиспользуемый код из вашего проекта и сокращает имена классов и методов. Это помогает уменьшить размер APK на 15-30% и затрудняет реверс-инжиниринг вашего приложения. Однако требует осторожности при использовании рефлексии.
Как удалить неиспользуемые ресурсы в Android Studio?
В Android Studio перейдите в верхнее меню Refactor, затем выберите Remove Unused Resources. Система просканирует проект и покажет список файлов, на которые нет ссылок в коде. Вы можете безопасно удалить их, чтобы освободить место.
Что такое On-Demand Resources?
Это функция Android App Bundle, позволяющая загружать часть контента (например, уровни игры или дополнительные языки) только тогда, когда пользователь обращается к ним. Это drastically сокращает начальный размер установки приложения, перенося нагрузку на последующие загрузки.