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

Инструкции по настройке · Ionic / Capacitor

Закрытое тестирование Google Play для приложений на Ionic и Capacitor

Ваше веб-приложение работает внутри нативного Android-проекта, поэтому релиз собирается как у любого Android-приложения. Здесь описано то, что специфично для Capacitor: веб-сборка, npx cap sync android, подпись в Android Studio и целевой SDK, а затем — как удержать 12 тестировщиков 14 дней.

Сборка
npx cap sync android
Код версии
android/app/build.gradle → versionCode
Целевой API
variables.gradle → targetSdkVersion = 36

Соберите подписанный app bundle

  1. Соберите веб-приложение

    Запустите продакшен-сборку веба (в большинстве проектов Ionic на Angular, React и Vue это npm run build), чтобы папка, указанная как webDir в конфигурации Capacitor, была свежей.

  2. Синхронизируйте с Android

    npx cap sync android копирует веб-сборку в нативный проект и обновляет нативные плагины. Пропустите этот шаг — и выпустите вчерашний JavaScript.

  3. Откройте Android Studio

    Выполните npx cap open android.

  4. Сгенерируйте бандл

    Выберите Build → Generate Signed Bundle/APK, затем Android App Bundle, выберите или создайте хранилище ключей, вариант release и нажмите Create.

Terminal
npm run build
npx cap sync android
npx cap open android

Предпочитаете командную строку или CI? npx cap build android собирает подписанный бандл с --androidreleasetype AAB и параметрами хранилища ключей. Передавайте пароли через переменные окружения, а не через файл в репозитории:

Terminal
npx cap build android --androidreleasetype AAB \
  --keystorepath ../upload-keystore.jks --keystorealias upload \
  --keystorepass "$KEYSTORE_PASS" --keystorealiaspass "$KEY_PASS"

Ключ загрузки и подписание приложений в Google Play

Для новых приложений Google Play требует подписание в Google Play. Хранилище, которое вы создаёте в мастере Android Studio (Create new) или передаёте в npx cap build, — это ваш ключ загрузки; отдельный ключ подписи приложения после первой загрузки хранит Google.

Android Studio рекомендует срок действия нового ключа не меньше 25 лет. Храните файл .jks вне папки android/ на случай, если придётся пересоздать нативный проект, и сделайте его резервную копию вместе с обоими паролями. Если ключ загрузки потерян, сброс можно запросить в Play Console.

Если вы храните параметры сборки в конфигурации Capacitor, не записывайте пароли в файл, который попадает в репозиторий. Конфигурация — часть репозитория.

Код версии и целевой уровень API

Capacitor не берёт версию из package.json. Значения, которые видит Google Play, находятся в android/app/build.gradle; увеличивайте versionCode перед каждой загрузкой:

android/app/build.gradle
android {
    defaultConfig {
        versionCode 2
        versionName "1.0.1"
    }
}

С 31 августа 2026 года новые приложения и обновления должны быть нацелены на Android 16 (уровень API 36). Capacitor задаёт targetSdkVersion в android/variables.gradle, и каждая мажорная версия поддерживает ровно одно значение: Capacitor 8 — 36, Capacitor 7 — 35. Собственные значения не поддерживаются, поэтому путь к API 36 — переход на Capacitor 8 вместе с плагинами, а не правка числа.

android/variables.gradle
ext {
    // ...
    targetSdkVersion = 36
}

Ловушки Ionic и Capacitor

  • Забытый live reload. server.url в конфигурации Capacitor заставляет приложение загружать адрес вашего компьютера разработки. Тестировщики видят пустой экран. Удалите его перед релизной сборкой.
  • Устаревшие веб-ресурсы. Если сгенерировать бандл в Android Studio без предварительного npx cap sync android, выйдет предыдущая веб-сборка.
  • Плагины другой мажорной версии. Все пакеты @capacitor/* и плагины сообщества должны совпадать по мажорной версии с @capacitor/android. Иначе будут ошибки нативной сборки или сбои во время работы.
  • Незашифрованные запросы. Android по умолчанию блокирует обычный трафик http://. Продакшен-сборки должны обращаться только к HTTPS API.
  • Нативные плагины и страницы 16 КБ. Плагины с библиотеками .so должны поддерживать страницы памяти 16 КБ. Play Console предупреждает об этом, а с 1 февраля 2027 года обновления без такой поддержки нельзя будет выпустить.
  • Проверка только в браузере. Кнопка «Назад», разрешения и глубокие ссылки в Android WebView ведут себя иначе. Перед загрузкой установите релизную сборку на реальное устройство.

Отлаживайте то, что тестировщики видят в WebView

Большинство проблем релизной сборки Capacitor живут в веб-слое, поэтому лучший вход — уже знакомые вам инструменты браузера. В релизной сборке они отключены: webContentsDebuggingEnabled по умолчанию равен false, а собственное логирование Capacitor подчиняется loggingBehavior со значением по умолчанию debug, поэтому релизные сборки молчат.

  1. Воспроизведите в отладочной сборке

    Запустите приложение на телефоне из Android Studio, откройте chrome://inspect в Chrome на компьютере и выберите WebView. У вас будут консоль, панель сети и точки останова для веб-кода. В Edge так же работает edge://inspect.

  2. Исследуйте релизную сборку только локально

    Если ошибка появляется только в релизе, временно установите webContentsDebuggingEnabled в true в сборке, которую ставите себе сами. Никогда не загружайте такую сборку: она делает веб-содержимое приложения отлаживаемым на любом устройстве.

  3. Собирайте нативные сбои в Play Console

    Сбои в Java-коде Capacitor или в нативных плагинах появляются в разделе Мониторинг и улучшение → Android Vitals → Сбои и ANR. При включённом R8 файл сопоставления внутри .aab делает их читаемыми.

capacitor.config.ts (local debug build only)
const config: CapacitorConfig = {
  // ...
  android: {
    // Never ship this to Google Play
    webContentsDebuggingEnabled: true,
  },
};

Спрашивайте у тестировщиков модель устройства, версию Android и версию Android System WebView. Многие ошибки, которые бывают только в WebView, зависят от этого последнего числа, а всё ниже android.minWebViewVersion выходит за пределы того, что поддерживает ваше приложение.

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

Когда бандл Ionic / Capacitor собран и подписан, всё остальное происходит в 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

Исправления и место живых обновлений

Пересоберите веб-приложение, синхронизируйте, увеличьте versionCode и сгенерируйте новый подписанный бандл для того же закрытого трека:

Terminal
npm run build
npx cap sync android
npx cap open android

Политика Google Play о злоупотреблении устройствами и сетями запрещает приложению обновляться в обход Google Play, но делает исключение для кода, который выполняется в интерпретаторе или виртуальной машине, например JavaScript в WebView. Поэтому и существуют сервисы живых обновлений для веб-слоя. Нативный код, плагины и разрешения всегда требуют нового бандла через Google Play.

Во время закрытого теста самый прямой путь — новый versionCode в закрытом треке: он проходит проверку, тестировщики получают его через Google Play, и он виден в истории выпусков. Если вы дополнительно используете сервис живых обновлений, оставьте его для настоящих исправлений и держите веб-сборку в закрытом треке синхронной с ним.

  • Помните о минимальной версии WebView. android.minWebViewVersion по умолчанию равен 60 и не может быть ниже 55. Тестировщикам с проблемами стоит сначала обновить Android System WebView из Google Play.
  • Никакого смешанного контента. android.allowMixedContent по умолчанию выключен и не предназначен для продакшена. Отдавайте все API и ресурсы по HTTPS и оставьте server.cleartext в значении по умолчанию false.
  • Синхронизируйте перед каждой сборкой. Каждое исправление требует npx cap sync android после веб-сборки, иначе в новом бандле останется старый JavaScript.

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

Можно ли использовать Chrome DevTools на телефоне тестировщика?

Не со сборкой, установленной из Google Play: релизные сборки не включают отладку WebView. Попросите шаги воспроизведения, установите ту же версию себе с включённой отладкой и исследуйте её через chrome://inspect.

Почему тестировщики видят пустой экран?

Обычно потому, что в бандле остался server.url от live reload, или запрос не проходит по обычному http://. Сначала проверьте конфигурацию Capacitor и панель сети в отладочной сборке.

Можно ли остаться на Capacitor 7?

Не для новых загрузок после срока целевого API: каждая основная версия Capacitor поддерживает ровно одно значение targetSdkVersion, Capacitor 7 использует 35, а Google Play требует 36. Запланируйте переход на Capacitor 8 вместе с плагинами до начала теста.

Нужен ли Android Studio для сборки бандла?

Нет. npx cap build android собирает подписанный .aab из командной строки с параметрами хранилища ключей, и это проще повторять в CI. В обоих случаях сначала выполните веб-сборку и npx cap sync android.

Источники

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

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

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

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

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

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

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