Ошибка «Android SDK not found» при первой сборке проекта в Unity — самая частая причина, по которой разработчики застревают на этапе портирования игры на смартфон. Причина почти всегда одна: модуль Android Build Support не был установлен вместе с редактором, либо путь к SDK задан вручную и указывает на несуществующую папку. Проверить это можно за минуту через Edit → Preferences → External Tools.
В этой статье разберём полный цикл работы с Unity на Android: от установки нужных компонентов до сборки готового APK или AAB-файла и тестирования на реальном устройстве. Отдельно рассмотрим типовые ошибки сборки и способы их диагностики без риска сломать проект.
Установка Unity с поддержкой Android
Начинать нужно с Unity Hub — официального менеджера версий редактора. При установке любой версии Unity Hub предлагает список модулей, и именно здесь кроется первый подводный камень: по умолчанию ставится только редактор под Windows или macOS, а платформенные модули нужно отметить вручную.
Для работы с Android отметьте галочку Android Build Support. Вместе с ним автоматически подтянутся три связанных компонента: Android SDK & NDK Tools и OpenJDK. Это избавит от ручной настройки Java и SDK — Unity будет использовать свои проверенные версии.
- 📦 Android Build Support — основной модуль для сборки под Android
- 🛠️ Android SDK & NDK Tools — инструменты компиляции и отладки
- ☕ OpenJDK — среда Java, необходимая для Gradle-сборки
- 🖼️ Windows/Mac IL2CPP — понадобится для сборки в 64-битной архитектуре
Проверка путей к SDK, NDK и JDK
После установки откройте в редакторе Edit → Preferences → External Tools. Напротив пунктов JDK, Android SDK и Android NDK должны стоять галочки, а пути должны вести в папку внутри каталога установки Unity. Если галочка снята и поле пустое — сборка гарантированно упадёт с ошибкой.
Ручную установку Android Studio и отдельного SDK для базовой сборки под Unity делать не обязательно. Она понадобится только в специфических случаях: например, когда нужен эмулятор с конкретной версией системы или продвинутая отладка через Android Profiler.
⚠️ Внимание: не указывайте вручную путь к SDK, скачанному отдельно, если не уверены в совместимости версий. Unity жёстко привязан к конкретным версиям NDK, и несовпадение приводит к неочевидным ошибкам компиляции нативного кода. Точные требования к версиям указаны в официальной документации для вашей версии редактора.
Настройка проекта под Android
Переключение целевой платформы выполняется через File → Build Settings. Выберите в списке платформ Android и нажмите Switch Platform. Первое переключение может занять заметное время — Unity переимпортирует все ассеты под новую платформу, и на больших проектах это минуты, а не секунды.
Далее откройте Edit → Project Settings → Player и заполните ключевые параметры. Без них собранное приложение либо не установится, либо будет отклонено при публикации в Google Play.
- 🏷️ Package Name — уникальный идентификатор вида
com.company.gamename - 🔢 Version и Bundle Version Code — версия приложения и её числовой код
- 📱 Minimum API Level — минимальная версия Android, на которой запустится игра
- 🎯 Target API Level — целевая версия; для публикации в Google Play действуют требования к её актуальности, уточняйте их в консоли разработчика
Сборка APK и AAB: пошаговая инструкция
Формат APK подходит для прямой установки на устройство и тестирования, а AAB (Android App Bundle) — обязательный формат для загрузки в Google Play. Переключение между ними выполняется галочкой Build App Bundle (Google Play) в окне Build Settings.
Порядок сборки выглядит так:
☑️ Чек-лист перед сборкой
После нажатия Build Unity запустит Gradle-сборку. Первый раз она идёт заметно дольше последующих — скачиваются зависимости и компилируется нативный код. Готовый файл появится в выбранной вами папке.
Зачем нужен IL2CPP вместо Mono
Mono — более быстрый вариант сборки для отладки, но он поддерживает только 32-битную архитектуру. Google Play требует наличия 64-битной версии, которую даёт только IL2CPP: C#-код транслируется в C++ и компилируется нативно. Сборка дольше, но производительность в релизе выше.
Сравнение Mono и IL2CPP
| Параметр | Mono | IL2CPP |
|---|---|---|
| Скорость сборки | Быстрая | Медленная |
| Поддержка ARM64 | Нет | Да |
| Производительность в релизе | Средняя | Выше |
| Отладка кода | Проще | Сложнее |
| Пригодность для Google Play | Ограничена | Полная |
Практический вывод прост: для ежедневной разработки и быстрых тестов используйте Mono, а релизную сборку всегда делайте на IL2CPP с архитектурой ARM64.
Тестирование на реальном устройстве
Чтобы установить APK на смартфон, включите на устройстве режим разработчика и отладку по USB. Обычно режим разработчика активируется многократным нажатием на пункт «Номер сборки» в разделе «О телефоне», но точный путь зависит от оболочки производителя — сверьтесь с инструкцией к вашей модели.
Подключите смартфон кабелем, разрешите отладку в диалоге на экране устройства, после чего в Unity станет доступна опция Build And Run — сборка автоматически установится и запустится на телефоне. Для просмотра логов в реальном времени используйте консоль Android Logcat, которую можно подключить как пакет через Package Manager.
⚠️ Внимание: если устройство не определяется, проверьте кабель (часть кабелей поддерживает только зарядку), установку драйверов производителя на ПК и подтверждение диалога отладки на самом смартфоне. Не меняйте системные настройки устройства, если не уверены в их назначении.
Типовые ошибки сборки и их решение
Большинство сбоев при сборке под Android сводится к нескольким повторяющимся сценариям. Разберём их по симптомам.
«SDK not found» или «Unable to locate Android SDK» — проверьте галочки в Preferences → External Tools. Если модуль установлен, но ошибка остаётся, попробуйте снять и заново поставить галочку, чтобы Unity перечитал путь.
Ошибки Gradle — самая размытая категория. Частая причина — конфликт плагинов или повреждённый кэш. Безопасный первый шаг: удалить папки Library и Temp в корне проекта при закрытом редакторе и пересобрать. Проект при этом не пострадает — Unity пересоздаст эти каталоги автоматически, хотя первый запуск займёт время.
Дублирование классов (duplicate classes) — возникает, когда два плагина тянут одну и ту же библиотеку. Здесь нужно найти конфликтующие AAR/JAR-файлы в папке Assets/Plugins/Android и оставить одну версию. Если проект использует External Dependency Manager (Play Services Resolver), попробуйте пункт Assets → External Dependency Manager → Android Resolver → Force Resolve.
Никогда не удаляйте папку Assets и не правьте файлы манифеста вслепую — сначала сделайте резервную копию проекта или убедитесь, что он под контролем версий.
Подпись приложения и публикация
Для установки релизной сборки и публикации в Google Play приложение должно быть подписано keystore-файлом. Создать его можно прямо из Unity: Player Settings → Publishing Settings → Keystore Manager. Храните файл ключа и пароли в надёжном месте — потеря ключа означает невозможность обновлять опубликованное приложение под тем же идентификатором.
При использовании Play App Signing в консоли Google Play часть забот о ключе берёт на себя Google, но локальный upload-ключ всё равно нужно беречь. Детали схемы подписи зависят от настроек вашего приложения в консоли, поэтому ориентируйтесь на актуальную документацию Google Play.
Часто задаваемые вопросы
Можно ли разрабатывать на Unity под Android без Android Studio?
Да. Модуль Android Build Support включает собственные SDK, NDK и OpenJDK, которых достаточно для сборки APK и AAB. Android Studio понадобится только для эмуляторов и продвинутой отладки.
Почему первая сборка занимает так много времени?
При первой сборке Unity переимпортирует ассеты под новую платформу, скачивает Gradle-зависимости и компилирует нативный код. Последующие сборки проходят значительно быстрее за счёт кэша.
Чем APK отличается от AAB?
APK — готовый установочный файл, который можно поставить на устройство напрямую. AAB — публикационный формат для Google Play: магазин сам формирует из него оптимизированные APK под конкретные устройства пользователей.
Игра тормозит на телефоне, хотя в редакторе работает плавно. Что проверить?
Соберите релизную версию на IL2CPP вместо Mono, проверьте размер и сжатие текстур в настройках импорта, а также количество вызовов отрисовки через встроенный Profiler. Отладочные сборки всегда медленнее релизных.
Безопасно ли удалять папку Library при ошибках сборки?
Да, при закрытом редакторе это безопасно: Unity полностью пересоздаст папку при следующем запуске проекта. Учтите только, что переимпорт всех ассетов займёт время, особенно на крупных проектах.