Почему даже небольшая игра на Unity 6 может занимать сотни мегабайт? Дело не только в графике. На размер Android-сборки влияют текстуры, звук, плагины, библиотеки, архитектуры процессора и способ упаковки приложения. В этом руководстве разберём, как найти основные источники «лишнего веса», уменьшить APK и AAB и не сломать игру.
Короткий ответ: сначала изучите Build Report и Editor Log, затем настройте сжатие текстур и звука, проверьте папку Resources, уменьшите объём неиспользуемого управляемого кода и сравните релизные сборки в одинаковых условиях. Нельзя обещать снижение на конкретный процент: результат зависит от проекта.
APK и AAB: какой размер сравнивать?
APK — устанавливаемый пакет Android. AAB — формат публикации, из которого магазин формирует APK для конкретного устройства. Размер исходного AAB, загружаемого APK и объём установленного приложения — не одно и то же. Google Play использует AAB для новых приложений, а RuStore поддерживает оба формата. Поэтому сравнивайте либо две APK-сборки с одинаковыми настройками, либо два AAB; отдельно измеряйте размер загрузки на тестовом устройстве.
Если готовите игру для RuStore, также полезна наша инструкция по публикации Unity-игры, AAB и подписи приложения.
Шаг 1. Найдите, что действительно занимает место
Сначала сделайте обычную релизную Android-сборку и сохраните файл для сравнения. Выключите Development Build и не меняйте одновременно десять настроек. После сборки откройте Editor Log: Unity выводит информацию о том, сколько места приходится на разные типы ассетов, а также список тяжёлых ресурсов. Для более подробного анализа можно использовать инструмент Build Report Inspector.
Чаще всего вверху оказываются текстуры, аудиофайлы и анимации. Но конкретная картина зависит от проекта: в пустой игре заметную долю могут составлять движок и библиотеки.
Шаг 2. Уменьшите размер текстур для Android
Выберите тяжёлую текстуру в окне Project → Inspector → параметры импорта. В настройках платформы Android проверьте Max Size, формат сжатия и качество. Для многих мобильных устройств доступны ETC2 и ASTC, но совместимость и конечное качество необходимо проверить на целевых устройствах.
Например, текстуру фона 4096 × 4096 иногда удаётся заменить вариантом 2048 × 2048 без заметных потерь на небольшом экране. Но если игрок может приблизить объект, уменьшение разрешения может стать заметным. Не применяйте одно значение Max Size ко всем изображениям без проверки.
Важно: простое преобразование исходного PSD в PNG само по себе не обязательно уменьшает размер сборки: Unity импортирует ресурсы во внутренний формат. Решают настройки импорта и итоговая компрессия.
Шаг 3. Проверьте аудио и анимации
Музыка и длинные звуковые дорожки иногда занимают больше места, чем вся графика. Для каждого крупного аудиофайла оцените необходимость стерео, частоту дискретизации и параметры сжатия в Import Settings. Слушайте результат на телефоне: чрезмерное сжатие заметно портит музыку и голос.
Для анимаций пересмотрите ключевые кадры и настройки компрессии. Прежде чем применять изменения ко всему проекту, попробуйте оптимизацию на одном ассете и сравните его вклад в сборку.
Шаг 4. Проверьте папку Resources и лишние зависимости
Unity обычно исключает из сборки ресурсы, которые нигде не используются. Но содержимое папок Resources — особый случай: оно включается в сборку даже без прямых ссылок из сцен. Поэтому удалите из этих папок ненужные тестовые текстуры, старые аудиофайлы и прототипы, предварительно проверив, что они не загружаются во время игры через Resources.Load.
Проверьте пакеты и плагины, которые больше не используются, но не удаляйте системные зависимости наугад. После каждого удаления обязательно собирайте и запускайте игру.
Шаг 5. Настройте Managed Stripping Level
В Edit → Project Settings → Player → Android → Other Settings найдите Managed Stripping Level. Эта настройка управляет удалением неиспользуемого управляемого кода. Уровни Low, Medium и High отличаются агрессивностью оптимизации. Более высокий уровень может уменьшить бинарные файлы, но иногда удаляет код, который вызывается динамически через reflection или сторонними SDK.
Для начала сравните релизную сборку с Low и Medium. При проблемах изучите link.xml и требования конкретных плагинов. Не выбирайте High только ради цифры в отчёте — проверяйте авторизацию, рекламу, покупки и сохранения.
Шаг 6. Оптимизируйте код Android и архитектуры
В Android Publishing Settings можно включить Minify → Release, чтобы уменьшить Java/Kotlin-часть с помощью инструментов Android. Такое удаление кода тоже может затронуть вызовы через reflection; для отдельных библиотек могут понадобиться правила сохранения классов.
Если выпускаете APK, проверьте, нужны ли в одном файле сразу несколько архитектур CPU. Функция Split APKs by target architecture создаёт отдельные варианты. Для AAB магазин сам формирует оптимизированные APK под конфигурацию устройства. Не путайте это с уменьшением общего исходного проекта.
Шаг 7. Правильно выбирайте сжатие сборки
В File → Build Profiles → Android → Platform Settings доступен параметр Compression Method. Unity поддерживает варианты с разным балансом между размером, временем сборки и скоростью распаковки. Не считайте, что LZ4HC всегда даёт самый маленький Android-пакет: в документации Unity для Android отмечено, что ZIP по умолчанию может обеспечивать несколько более сильное сжатие, хотя распаковывается медленнее. Сравнивайте результаты на одинаковом проекте и настройках.
Шаг 8. Не путайте Split Application Binary с настоящим уменьшением игры
Split Application Binary позволяет вынести часть игровых данных в отдельные части доставки: для APK это может быть OBB, а для AAB — asset packs. Начальный пакет может стать меньше, но общие данные игры от этого не исчезнут. Сначала уточните ограничения целевого магазина и способ доставки файлов.
Как измерить эффективность каждого изменения
Ниже — опубликованные результаты компаний, а не результаты тестирования HAKSTER. Цифры относятся к разным продуктам и условиям: их нельзя складывать или выдавать за одну последовательную оптимизацию. Не сравнивайте debug APK с release AAB.
Проверенные результаты Google и Unity
| Источник | Что сравнивали | Опубликованный результат | Что важно учитывать |
|---|---|---|---|
| Google, Android Developers | Увеличение загружаемого APK и конверсия установок | +6 МБ к APK связаны с −1% установок по данным исследования, на которое ссылается Google | Это статистическая зависимость из исследования, а не результат измерения игры HAKSTER и не обещание роста установок после оптимизации. |
| Unity / SEGA HARDlight, Sonic Dream Team | Размер сборки игры для iOS до и после оптимизации | С 4 до 2 ГБ (−50%) | Кейс показывает потенциал комплексной оптимизации, но относится к iOS, а не Android/APK. |
| Google / Adobe Acrobat Reader | Использование Android App Bundle | Размер приложения уменьшился на 20% | Это корпоративный пример Android-приложения, не игры на Unity. |
Источники: Android Developers — Reduce game size; Google Play — Android App Bundle improvements (пример Adobe); Unity — Optimizing Sonic Dream Team.
Практический вывод: публикация через AAB помогает уменьшить объём данных, доставляемых конкретному устройству, а оптимизация игровых ресурсов способна дополнительно сократить саму сборку. Однако величина экономии всегда зависит от конкретной игры.
Для собственного теста фиксируйте размер исходного APK, затем меняйте одну настройку, записывайте новый размер и проверяйте игру на устройстве. Это позволяет отделить эффект конкретной оптимизации от изменений формата доставки.
Примечание о достоверности: опубликованные показатели Google, Adobe и Unity относятся к разным продуктам. Они служат подтверждёнными иллюстрациями возможных результатов, а не обещанием конкретной экономии на любой Android-игре.
Частые ошибки при уменьшении APK и AAB
- Сравнивать размер AAB с размером установленного приложения и делать вывод о «лишних мегабайтах».
- Одновременно менять формат текстур, stripping и упаковку: после этого непонятно, что помогло или сломало игру.
- Ставить Managed Stripping Level = High без проверки SDK и reflection.
- Удалять весь каталог Resources, забыв о динамической загрузке.
- Измерять только размер файла, игнорируя скорость запуска и качество графики.
Чек-лист перед релизом
- Есть исходная релизная сборка и её размер.
- Проверен Editor Log и найдены самые тяжёлые ресурсы.
- Текстуры и звук настроены под реальные устройства.
- Папка Resources проверена на лишние ассеты.
- Managed Stripping и Minify не ломают плагины.
- Формат APK/AAB и способ доставки соответствуют магазину.
- После изменений протестированы первый запуск, сохранения, интерфейс и сторонние SDK.
Ответы на частые вопросы
Можно ли уменьшить размер APK в Unity в два раза?
Иногда да, если проект содержит неоптимизированные большие ресурсы. Но гарантировать такой результат нельзя: у проекта с уже сжатыми ассетами запас оптимизации будет меньше.
Почему AAB меньше или больше APK?
Это разные форматы и разные способы доставки. AAB служит контейнером для генерации оптимизированных APK, поэтому размеры исходных файлов сами по себе не показывают объём загрузки конкретным пользователем.
Помогает ли IL2CPP уменьшить размер сборки?
Не обязательно. Результат зависит от кода, платформенных библиотек и настроек stripping. Сравнивайте одинаковые релизные конфигурации и проверяйте совместимость.
Итог
Самый надёжный способ уменьшить размер Android-игры на Unity 6 — не искать «волшебную галочку», а последовательно измерять вклад ресурсов и проверять результат. Начните с Build Report, затем займитесь текстурами, аудио и папкой Resources, после чего осторожно оптимизируйте код. Так вы получите меньшую сборку без неожиданных поломок перед публикацией.

