Быстрая сборка Unity‑проекта под Android: что настроить и почему
Короткий ответ: установите рекомендованные Unity версии SDK/NDK и OpenJDK, используйте Gradle (лучше — Export Project для CI), создайте и надёжно сохраните keystore, собирайте AAB для Google Play и настраивайте подпись в Gradle через переменные окружения. Ниже — компактный пошаговый чек‑лист и частые ошибки с решениями.
Подготовка окружения (SDK, NDK, JDK)
- Установите Android Studio (как эталон SDK), затем через SDK Manager установите:
- Android SDK Platform для target (например, 33/34).
- Platform‑Tools и Build‑Tools (текущую + 1–2 предыдущие версии).
- NDK нужной версии (см. рекомендацию Unity).
- JDK: используйте OpenJDK 11, встроенный в Unity, если нет явной необходимости в другой версии. Менять JAVA_HOME не нужно, пока сборки проходят.
- Пути:
- Windows: C:\Users<User>\AppData\Local\Android\Sdk
- macOS: ~/Library/Android/sdk
- Linux: ~/Android/Sdk
Фиксируйте версии SDK/NDK/JDK в README проекта и в CI‑скриптах — это уменьшит «на моей машине собирается».
Настройка Unity и Gradle
- Модули Unity: через Unity Hub добавьте Android Build Support, Android SDK & NDK Tools (если хотите встроенные) и OpenJDK.
- В Unity: Edit → Preferences → External Tools — укажите пути к SDK/NDK/JDK либо оставьте опцию "Installed with Unity".
- Build System:
- Выбирайте Gradle (рекомендуется). Для тонкой настройки ставьте Export Project и собирайте через Android Studio/CI.
- Для Google Play отмечайте Build App Bundle.
- Если экспортируете: выносите секреты (keystore и пароли) из репозитория. Используйте gradle.properties либо CI‑секреты для signingConfigs.
Частая причина падений — несоответствие версии NDK и Android Gradle Plugin. Используйте рекомендуемую Unity связку NDK + Gradle Plugin.
Подпись APK/AAB и управление ключами
- Создание keystore: Project Settings → Player → Publishing Settings → Create New Keystore.
- Храните keystore вне репозитория (BuildConfig/Keystore) и делайте резервные копии в защищённом хранилище.
- Срок действия ключа — минимум 25 лет.
- V1/V2/V3: для максимальной совместимости включайте V1 + V2 + V3; при публикации AAB Google Play подпишет APK через Play App Signing, но свой keystore всё равно нужен.
- Автоматизация: в exported Gradle проекте используйте:
- gradle.properties (локально) или CI Secrets для паролей,
- signingConfigs в build.gradle для разных билдов (dev/stage/prod).
Чек‑лист для быстрой проверки перед сборкой
- [ ] Unity и проект в совместимой версии.
- [ ] SDK Platform и Build‑Tools установлены (target SDK совпадает).
- [ ] NDK версия — рекомендованная Unity.
- [ ] JDK (OpenJDK 11) корректен.
- [ ] Export Project если нужно кастомное Gradle‑настроение.
- [ ] Keystore создан и пароли в CI/секретах.
- [ ] Build App Bundle для Play, APK для локального теста.
Частые ошибки
- "SDK Build Tools not found" — установите требуемую версию Build‑Tools через SDK Manager.
- "Unsupported NDK version" — установите NDK, рекомендованный конкретной версией Unity, и пропишите путь.
- "Unsupported class file major version" — несоответствие JDK/Gradle; используйте JDK Unity или обновите Gradle Plugin.
- "Keystore was tampered with, or password was incorrect" — проверьте кодировку и правильность пароля, не используйте повреждённый файл.
- Конфликты ресурсов плагинов — объедините манифесты, используйте tools:replace или переименуйте конфликтующие ресурсы.
FAQ
- Нужно ли всегда экспортировать Gradle проект?
- Нет. Для простых проектов Unity‑сборки хватает встроенного Gradle. Экспорт нужен для сложной интеграции, нативных плагинов и CI.
- Как хранить пароль keystore в CI безопасно?
- В секрете CI (GitHub Secrets, GitLab CI variables) и подставлять в gradle.properties на этапе сборки, не коммитя в репозиторий.
- Что выбрать: APK для теста или AAB?
- Для публикации на Play — AAB. Для быстрого локального теста — APK.
Если нужно, могу сгенерировать пример gradle.properties и signingConfigs для CI или дать конкретные команды для настройки в GitHub Actions.