Перейти к содержимому

Инструкции по настройке · Unity

Закрытое тестирование Google Play для игр на Unity

Unity по шагам и меню: соберите Android App Bundle с правильным хранилищем ключей, scripting backend и уровнем API, загрузите его в закрытый трек и удержите 12 тестировщиков 14 дней.

Сборка
Build App Bundle (Google Play)
Код версии
Player → Bundle Version Code
Целевой API
Target API Level ≥ 36

Соберите Android App Bundle

Названия меню ниже взяты из Unity 6, где используется File → Build Profiles. В Unity 2022 и более ранних версиях те же параметры находятся в File → Build Settings.

  1. Переключитесь на Android

    Откройте File → Build Profiles, выберите Android (если модуля нет, установите его через Unity Hub) и сделайте профиль активным кнопкой Switch Profile.

  2. Задайте имя пакета

    В Edit → Project Settings → Player → Android в разделе Other Settings → Identification укажите имя пакета. После первой загрузки его нельзя изменить.

  3. Выберите IL2CPP и ARM64

    В разделе Configuration установите Scripting Backend в IL2CPP, затем включите ARM64 в Target Architectures. Google Play требует 64-битный нативный код, а ARM64 доступен только с IL2CPP.

  4. Включите бандл

    Вернитесь в профиль сборки, отметьте Build App Bundle (Google Play) (флажок виден, пока выключен Export Project) и убедитесь, что Development Build выключен.

  5. Соберите

    Нажмите Build, выберите имя файла, и Unity запишет .aab.

Собираете в CI? Те же настройки доступны из скрипта редактора, и забыть увеличить код версии тогда просто невозможно:

Assets/Editor/ReleaseBuild.cs
using UnityEditor;

public static class ReleaseBuild
{
    [MenuItem("Build/Android App Bundle")]
    public static void Build()
    {
        PlayerSettings.Android.bundleVersionCode += 1;
        EditorUserBuildSettings.buildAppBundle = true;
        BuildPipeline.BuildPlayer(new BuildPlayerOptions
        {
            scenes = new[] { "Assets/Scenes/Main.unity" },
            locationPathName = "Builds/game.aab",
            target = BuildTarget.Android,
            options = BuildOptions.None,
        });
    }
}

Хранилище ключей и подписание приложений в Google Play

Без собственного хранилища ключей Unity подписывает отладочным ключом, а Play Console отклоняет бандлы с отладочной подписью. Создайте хранилище в редакторе:

  1. Откройте Keystore Manager

    Перейдите в Edit → Project Settings → Player → Android → Publishing Settings и откройте Keystore Manager.

  2. Создайте хранилище

    Выберите Keystore → Create New, сохраните файл (в любом месте или в отдельной папке для хранилищ), задайте пароль и добавьте ключ с псевдонимом.

  3. Используйте его для сборок

    Вернитесь в Publishing Settings, выберите хранилище и псевдоним ключа и введите пароли.

Это хранилище — ваш ключ загрузки. При первой загрузке Play Console настраивает подписание приложений в Google Play, и ключ подписи приложения хранит Google. Сделайте резервную копию файла и обоих паролей вне проекта; потеря ключа загрузки означает запрос на сброс в Play Console.

Bundle Version Code и Target API Level

В Player → Other Settings → Identification поле Version видят игроки, а Bundle Version Code — это целое число, которое сравнивает Google. Увеличивайте Bundle Version Code перед каждой загружаемой сборкой; повторные коды Play Console отклоняет.

Рядом находится Target API Level. С 31 августа 2026 года новые приложения и обновления должны быть нацелены на Android 16 (уровень API 36). В автоматическом режиме Unity берёт самый высокий установленный SDK; проверьте, что он не ниже 36. Старые версии редактора могут не поддерживать новейший уровень; в таком случае обновите Unity до теста, а не во время него.

Ловушки Unity

  • Сборка на Mono. Mono не умеет собирать ARM64, и Play Console помечает выпуск как не соответствующий требованию о 64 битах. Перейдите на IL2CPP с ARM64.
  • Забытый Development Build. Сборки для разработки медленнее, показывают водяной знак и могут быть помечены как отлаживаемые, а такие Play Console отклоняет.
  • Старые SDK рекламы и аналитики. Устаревшие сторонние SDK приносят старые нативные библиотеки и разрешения. Обновите их до теста: Play Console предупреждает о библиотеках без поддержки страниц памяти 16 КБ, а с 1 февраля 2027 года обновления без такой поддержки нельзя будет выпустить.
  • Слишком большой бандл. Если загрузка не проходит из-за размера, включите Split Application Binary, и Unity перенесёт ресурсы в пакеты Play Asset Delivery вместо базового модуля.
  • Minify ломает плагины. Минификация в release может удалить Java-классы, которые плагины загружают по имени. Добавьте правила keep или проверьте минифицированный release на устройстве перед загрузкой.
  • Забытый код версии. Вторая загрузка с тем же Bundle Version Code не пройдёт. Автоматизируйте увеличение или внесите его в чек-лист выпуска.

Нативные символы сбоев для сборок IL2CPP

Когда игра на Unity падает на телефоне тестировщика, трассировка указывает внутрь libil2cpp, libunity или libmain. Без символов Play Console показывает только сырые адреса, а Google Play не символизирует сбои, пришедшие до загрузки символов. Настройте это до первого закрытого выпуска, а не после первого сбоя.

  1. Включите символы

    В File → Build Profiles → Android установите Debug Symbols в Public. Публичные символы содержат только таблицу символов: этого достаточно для читаемых имён функций, и файл остаётся небольшим. Debugging добавляет полную отладочную информацию, чтобы локально подключить нативный отладчик.

  2. Выберите, как они попадут в Google

    Выберите .zip, чтобы получить пакет с именем вроде MyApp-0.1-v100-IL2CPP.symbols.zip и загрузить его самостоятельно, или встройте символы в бандл, чтобы они загружались вместе с .aab. В скрипте сборки второй вариант делает фрагмент ниже.

  3. Сопоставляйте символы с версиями

    Символы относятся ровно к одному Bundle Version Code. Если загружаете zip вручную, делайте это в Обозревателе app bundle в Play Console на вкладке Загрузки этой версии, до того как тестировщики её установят.

Editor script (C#), e.g. in a CI build method
// Public symbols, embedded in the .aab so they upload with it
UserBuildSettings.DebugSymbols.level = DebugSymbolLevel.SymbolTable;
UserBuildSettings.DebugSymbols.format = DebugSymbolFormat.IncludeInBundle;

Если нативный плагин поставляет отдельный файл символов, выберите его в Inspector и установите Shared Library Type в Symbol с подходящим CPU. Файл должен называться так же, как библиотека, и лежать в отдельной папке.

Коротко о Play Console: от закрытого теста до продакшена

Когда бандл Unity собран и подписан, всё остальное происходит в Play Console и одинаково для любого фреймворка. Здесь краткий чек-лист; каждое меню и экран описаны в полном руководстве по Play Console.

  • Завершите настройку приложения на панели управления: политика конфиденциальности, доступ к приложению, реклама, возрастной рейтинг, целевая аудитория, безопасность данных и страница в Play Маркете.
  • Создайте выпуск для закрытого теста в разделе Тестирование и выпуск → Тестирование → Закрытое тестирование: выберите страны тестировщиков, загрузите .aab и отправьте на проверку.
  • Добавьте тестировщиков через Google Группу на вкладке Тестировщики и поделитесь ссылкой opt-in. Она заработает, когда у трека появится статус Опубликовано.
  • Держите не менее 12 тестировщиков с opt-in 14 дней подряд. Внутреннее тестирование не засчитывается, а у того, кто вышел и вернулся, отсчёт 14 дней начинается заново.
  • Выпустите хотя бы одно обновление во время теста и запишите, что нашли тестировщики и что вы изменили.
  • Подайте заявку на доступ к продакшену с панели управления и ответьте на три раздела о тесте, приложении и готовности. Решение принимает Google; никто не может гарантировать одобрение.

Учитывайте выбывших: наберите больше 12 тестировщиков, чтобы уход одного человека не сдвинул ваши сроки. Все шаги в Play Console.

Полное руководство по Play Console

Закрытый трек, Google Группа и ссылка opt-in, правило 12 тестировщиков / 14 дней и заявка на продакшен, шаг за шагом на одной странице.

Открыть шаги в Play Console

Быстрые итерации без вреда для теста

В Unity: увеличьте Bundle Version Code, пересоберите .aab и загрузите его в тот же закрытый трек. Достаточно небольшого исправления посреди теста.

На ваших устройствах Build and Run устанавливает игру на телефон, выбранный в Run Device; после того как путь вывода задан, Ctrl+B (macOS: Cmd+B) повторяет это. Application patching в Unity ускоряет отладочные сборки на вашем устройстве, но ничего не доставляет тестировщикам: им всегда нужен новый .aab в закрытом треке.

  • Пароли не сохраняются. Unity не хранит пароли хранилища ключей и ключа на диске, поэтому вы вводите их заново после каждого перезапуска Editor. Для воспроизводимых сборок в CI задавайте их в скрипте сборки Editor, рядом с повышением кода версии из раздела о сборке.
  • Следите за размером. Google Play ограничивает базовый модуль 500 МБ сжатого размера загрузки. Крупным играм нужны пакеты ресурсов через Play Asset Delivery; модули и пакеты install-time вместе могут занимать до 4 ГБ.
  • Пересобирайте после нативных обновлений. Editor показывает предупреждение при сборке для каждого .so, выровненного по 4 КБ вместо 16 КБ. Обновитесь до последнего патч-выпуска вашего Editor и нативных пакетов, например Burst, и пересоберите перед следующей загрузкой.
  • Не меняйте версию Editor. Смена версии Unity посреди теста меняет библиотеки движка, которые запускают тестировщики. Зафиксируйте версию на все 14 дней, если только сбой не вынуждает обновиться.

Частые вопросы

Можно ли протестировать на эмуляторе Android перед загрузкой?

Unity не поддерживает эмуляторы Android. Тестируйте на физическом устройстве; Unity Remote помогает с вводом, а Device Simulator с раскладкой экрана, но ни то ни другое не заменит релизную сборку на реальном телефоне.

На какие уровни API может ориентироваться Unity 6?

Страница требований Android для последних версий Unity 6 говорит, что можно ориентироваться на уровни API 35 и 36, а Google Play требует 36 для новых приложений и обновлений. Минимальная поддерживаемая версия Android 8.0 (уровень API 26).

Действительно ли нужен IL2CPP?

Для Google Play на практике да: только IL2CPP собирает ARM64, а Google Play требует 64-битный нативный код. Кроме того, именно IL2CPP создаёт символы libil2cpp для читаемых отчётов о сбоях.

Почему некоторые тестировщики не могут запустить игру?

Unity 6 требует OpenGL ES 3.1 или Vulkan; OpenGL ES 3.0 и более старые версии не поддерживаются. Оставьте Vulkan включённым и сообщите тестировщикам минимальные требования до opt-in, чтобы не потерять их в первый же день.

Источники

Технические детали сверены с официальной документацией ниже. Меню и значения по умолчанию меняются от версии к версии; если сомневаетесь, ориентируйтесь на официальную страницу.

Впервые слышите о правиле 12 тестировщиков?

Общее руководство объясняет требование Google, как день за днём проходит кампания TestBunny и что мы можем и не можем гарантировать.

Читать общее руководство

Нужны 12 настоящих тестировщиков на 14 дней?

Добавьте приложение и ссылку на закрытое тестирование, выберите Starter (15 тестировщиков) или Pro (25 тестировщиков) и следите за активностью каждого тестировщика по дням в своей панели.

TestBunny не связан с Google. Тестировщики получают кредиты, а не деньги. Никто не может гарантировать решение Google о доступе к продакшену, и мы тоже.