App Size Optimization в мобильной разработке: основы, методы и практики

Автор: IT Sectr Опубликовано: 2026-04-01 Время чтения: 8 мин

App Size Optimization — совокупность техник, направленных на уменьшение размера установочного файла (APK, AAB, IPA) без потери функциональности. По данным Android Reduce APK Size Guide, каждый мегабайт уменьшения размера может увеличить конверсию установок на 1–2% в регионах с медленным интернетом. App Thinning — ключевая технология Apple, доставляющая только те ресурсы, которые нужны конкретному устройству.

Главное

  • App Size Optimization — уменьшение установочного файла для увеличения конверсии и скорости загрузки
  • Увеличение конверсии — каждый 1 МБ уменьшения повышает вероятность установки на 1–2%
  • App Thinning — технология Apple с On-Demand Resources и Slicing для уменьшения установки
  • ProGuard и R8 — инструменты обфускации и минификации кода для Android
  • Оптимизация ресурсов — удаление неиспользуемых ассетов, сжатие изображений и шрифтов

Что такое App Size Optimization

App Size Optimization — дисциплина мобильной разработки, направленная на минимизацию размера установочного пакета приложения. В неё входит удаление мёртвого кода и ресурсов, сжатие изображений, оптимизация библиотек, фрагментация сборки под разные архитектуры и использование технологий доставки по требованию.

Размер приложения неравномерно влияет на разные сегменты пользователей. В регионах с развитой мобильной инфраструктурой (США, Европа, Япония) разница между 50 и 100 МБ может быть незаметна. В развивающихся регионах (Индия, Индонезия, Бразилия) каждый лишний мегабайт снижает конверсию установок из-за лимитов тарифов и скорости мобильного интернета. Google Play ограничивает размер APK 200 МБ, но рекомендует держать размер ниже 100 МБ.

Для iOS App Store максимальный размер загрузки по сотовой сети — 200 МБ (до 2023 года было 150 МБ). Если IPA превышает этот лимит, пользователь может установить приложение только через Wi-Fi. Apple также поддерживает App Thinning, который включает Slicing, Bitcode и On-Demand Resources — технологии, автоматически уменьшающие размер установки на конкретном устройстве без участия разработчика.

Почему размер приложения критичен

Размер приложения влияет не только на конверсию установок, но и на retention, частоту обновлений и скорость первого запуска. Каждый дополнительный мегабайт — это барьер между пользователем и использованием вашего продукта.

Влияние на конверсию установок

Согласно данным Google I/O 2024, уменьшение APK на 10 МБ увеличивает конверсию установок в среднем на 3.5%. Для приложений размером 150+ МБ конверсия может быть на 20–30% ниже, чем для приложений того же класса размером 50 МБ. Эффект особенно выражен в Google Play, где пользователь видит размер до установки. В App Store размер показывается на странице приложения, и пользователи с лимитированным тарифом откладывают установку на Wi-Fi, после чего часто забывают о приложении.

Частота обновлений и обновление по воздуху

Большое приложение реже обновляется по воздуху — пользователи откладывают загрузку патчей на Wi-Fi, пропуская критические исправления безопасности. Google Play позволяет использовать Incremental Updates (патчи размером до 10 МБ), но полная переустановка всё равно загружает полный APK или AAB. Apple App Store использует Delta Updates, передавая только изменённые файлы, но даже дельта может быть значительной при изменении ресурсов.

Первый запуск и распаковка

Размер напрямую влияет на время первого запуска: приложение должно распаковать ресурсы, скомпилировать код (Android) или подписать кэш (iOS). Приложение размером 200 МБ может запускаться на 10–15 секунд дольше, чем приложение размером 50 МБ на среднем устройстве. Это ухудшает Onboarding Experience — пользователь может закрыть приложение, не дождавшись загрузки.

РазмерВремя загрузки (3G)Время первого запуска
30 МБ–20 сек3–5 сек
100 МБ–70 сек5–8 сек
200 МБ–140 сек10–15 сек

Оптимизация ресурсов и ассетов

Ресурсы — изображения, шрифты, звуки, видео — составляют 60–80% размера типичного мобильного приложения. Оптимизация ресурсов даёт наибольший выигрыш при минимальных трудозатратах. Основные направления: сжатие, удаление дубликатов и неиспользуемых ассетов, выбор правильных форматов.

Оптимизация изображений

WebP — формат изображений от Google, обеспечивающий на 25–35% лучшее сжатие, чем PNG, и на 15–20% лучшее, чем JPEG, при том же визуальном качестве. Android поддерживает WebP нативно с API 18. Для iOS WebP поддерживается через библиотеку SDWebImage или Kingfisher, а с iOS 17 появилась нативная поддержка. AVIF — более современный формат, дающий ещё 10–15% экономии относительно WebP, но с более медленным декодированием.

Удаление неиспользуемых ресурсов — самый простой способ уменьшить размер. В Android используйте рефакторинг с Android Studio: Analyze → Run Inspection → Unused Resources. В iOS — Build Settings → Remove Unused Resources. Часто в проектах остаются спрайты из ранних версий, старые иконки, неиспользуемые launch screen-изображения, которые раздувают размер без какой-либо функциональной нагрузки.

ФорматСжатие относительно PNGПоддержка
PNGВсе платформы
WebP25–35%Android нативно, iOS через библиотеки
AVIF35–45%Android 12+, iOS 17+
JPEG XR30–40%Только Windows

Оптимизация шрифтов и звуков

Кастомные шрифты могут занимать 5–15 МБ, особенно если подключена вся гарнитура (все начертания: Regular, Bold, Italic, BoldItalic). Используйте только необходимые начертания и подмножества символов через subsetting — удаление глифов для языков, не поддерживаемых приложением. Сервисы вроде Google Fonts и Transfonter позволяют создать минимальный набор символов. Для звуков используйте AAC/HE-AAC вместо WAV и несжатых форматов — экономия до 90% без потери качества.

Оптимизация кода и библиотек

Код составляет 20–40% размера приложения, но его оптимизация сложнее, чем ресурсов, потому что требует анализа зависимостей, обфускации и удаления мёртвого кода без риска сломать функциональность.

ProGuard и R8 для Android

ProGuard — инструмент для Android, выполняющий обфускацию, минификацию и оптимизацию кода. R8 — его преемник, встроенный в Android Gradle Plugin, работающий быстрее и эффективнее. R8 удаляет неиспользуемые классы и методы, сокращает имена переменных и переписывает код для уменьшения количества инструкций. Типичное уменьшение размера DEX-файлов с помощью R8 — 30–50%.

groovy
// build.gradle — настройка R8 для минификации
android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt')
            shrinkResources true
        }
    }
}

Оптимизация библиотек и зависимостей

Библиотеки — частая причина раздутого размера. Одна библиотека может тянуть транзитивные зависимости, которые увеличивают размер на 5–20 МБ без прямой пользы для приложения. Используйте Gradle Version Catalog для Android и Swift Package Manager для iOS с явным указанием зависимостей. Анализируйте размер с помощью Build Analyzer в Android Studio или Xcode Build Timeline. Заменяйте тяжёлые библиотеки на более лёгкие альтернативы: например, OkHttp (3 МБ) вместо Apache HTTP (15 МБ).

Удаление неиспользуемого кода в iOS

Dead Code Stripping — автоматическое удаление неиспользуемых методов и классов на этапе линковки в Xcode. Включается через Build Settings → Dead Code Stripping = YES. Bitcode — промежуточное представление, которое Apple может перекомпилировать под разные архитектуры, удаляя неиспользуемые функции. Однако с Xcode 14 Bitcode стал опциональным, а его вклад в уменьшение размера составляет 5–15% для Objective-C проектов и меньше для Swift.

App Thinning и доставка по требованию

App Thinning — технология Apple, автоматически уменьшающая размер устанавливаемого приложения за счёт доставки только тех ресурсов, которые необходимы конкретному устройству. Состоит из трёх компонентов: Slicing, On-Demand Resources и Bitcode. В Android аналогом является Android App Bundle (AAB) с Dynamic Delivery.

Android App Bundle (AAB)

AAB — формат публикации в Google Play, при котором магазин генерирует APK для каждого устройства отдельно, включая только ресурсы для его архитектуры (armeabi-v7a, arm64-v8a), плотности экрана (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) и языков. Типичное уменьшение размера установки при переходе с универсального APK на AAB составляет 20–40%. Play Feature Delivery позволяет загружать модули по требованию, а Install-time модули — включать в базовую установку.

groovy
// build.gradle — настройка AAB и Dynamic Features
android {
    bundle {
        language {
            enableSplit = true
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
}

On-Demand Resources в iOS

On-Demand Resources (ODR) — механизм iOS, при котором ресурсы (уровни игры, изображения высокого разрешения, видео) загружаются с серверов Apple только когда они реально нужны пользователю. Размер initial установки может быть уменьшен на 50–80%. Ресурсы делятся на три категории: Initial Install Tags (загружаются при установке), Prefetched Tag Order (загружаются в фоне после установки) и On-Demand (загружаются только при запросе). Apple рекомендует использовать ODR для контента, который не нужен на первом экране: уровни игры, дополнительный контент, видеоинструкции.

SwiftUI поддерживает ODR через атрибут Bundle.module, а UIKit — через NSBundleResourceRequest. Для игр на Unity и Unreal Engine ODR интегрируется на уровне нативной обвязки. Главное ограничение — ODR-ресурсы удаляются системой при нехватке места, поэтому критичные для работы данные должны быть включены в основную сборку.

Часто задаваемые вопросы

Какой оптимальный размер мобильного приложения?

Менее 50 МБ — идеальный размер для максимальной конверсии установок. 50–100 МБ — приемлемый для большинства приложений. Свыше 100 МБ — требуется оправдание размером (игры, офлайн-карты, редакторы контента).

Что выгоднее оптимизировать — код или ресурсы?

Ресурсы дают больший выигрыш за меньшее время. Начните с удаления неиспользуемых ассетов, конвертации PNG в WebP и сжатия звуков. Затем переходите к кодовой оптимизации через R8 или Dead Code Stripping.

Как AAB уменьшает размер APK?

Google Play генерирует APK только для конкретного устройства: arm64-v8a код, xhdpi ресурсы, нужный язык. Универсальный APK содержит все варианты сразу, что увеличивает размер в 1.5–2 раза. AAB решает эту проблему на уровне магазина.

Влияет ли размер на скорость работы приложения?

Косвенно. Большой размер означает больше кода для JIT/AOT-компиляции, больше ресурсов для загрузки в память и больше времени на парсинг манифестов. Однако прямое влияние на производительность в рантайме минимально — размер влияет на установку и первый запуск.

Что такое Install-time vs On-Demand модули?

Install-time — часть базовой установки, доступна сразу. On-Demand — загружается при первом обращении, не входит в начальную установку. Используйте On-Demand для функций, которые нужны менее 20% пользователей: диагностика, туториалы, AR-фильтры.

Итоги

  • App Size Optimization — уменьшение размера приложения для повышения конверсии и скорости загрузки
  • Ресурсы составляют 60–80% размера — их оптимизация даёт наибольший выигрыш
  • WebP и AVIF — форматы сжатия изображений с экономией 25–45% относительно PNG
  • R8 для Android уменьшает DEX на 30–50% через минификацию кода
  • App Thinning (iOS) и AAB (Android) доставляют только нужные ресурсы
  • On-Demand Resources позволяют загружать контент после установки
  • Целевой размер для максимальной конверсии — менее 50 МБ

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также