Сборка релизного APK и подпись приложения

Короткий ответ: сгенерируйте keystore, настройте signingConfigs в модуле app (build.gradle), соберите release‑вариант через Android Studio или ./gradlew assembleRelease и проверьте подпись apksigner. Ниже — практические команды и шаблоны конфигурации.

Подготовка проекта и общие настройки

Перед сборкой:

  • Проверьте versionCode/versionName в module:app/build.gradle.
  • Убедитесь, что приложение протестировано и минифицировано (R8/ProGuard).
  • Проверьте манифест на нужные разрешения и remove debug-only code/логирование.

Используйте R8/ProGuard только после проверки, добавьте правила для сохранения моделей/рефлексии.

Создание keystore и настройка Gradle

  1. Создайте keystore (один ключ для всех обновлений в Google Play): keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias Сохраните файл в защищённом месте (и в .gitignore, не коммитить!).

  2. Безопаснее хранить пароли в gradle.properties (локально, не в репозитории): MYAPP_RELEASE_STORE_FILE=my-release-key.jks MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=your_store_password MYAPP_RELEASE_KEY_PASSWORD=your_key_password

  3. Пример конфигурации в app/build.gradle: signingConfigs { release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }

Если потеряете keystore или пароли — вы не сможете обновлять приложение в Play Console. Делайте надёжный бэкап.

Сборка: Android Studio и командная строка

  • Через Android Studio: Build > Generate Signed Bundle / APK > выберите APK или Android App Bundle (AAB) > укажите keystore и соберите release. ААB рекомендуется для публикации в Play.

  • Через Gradle (CI/CD или без IDE): ./gradlew assembleRelease Выход: app/build/outputs/apk/release/app-release.apk (или app-release-unsigned.apk в зависимости от конфигурации).

  • Для Flutter: flutter build apk --release

  • Для React Native — аналогично через Gradle в android/ папке.

Проверка подписи и выравнивание

  1. Проверить сертификат внутри APK: keytool -printcert -jarfile app-release.apk

  2. Выровнять APK (zipalign) — ускоряет установку: zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk

  3. Проверка подписи apksigner: apksigner verify --verbose app-release.apk

Последовательность для Play: собрать AAB или подписанный, выровненный APK → проверить apksigner → загрузить в Play Console.

APK vs AAB — что выбрать

  • APK: удобно для sideload и внутреннего теста.
  • AAB: меньший конечный размер в Play, обязателен для новых приложений в некоторых случаях. Рекомендация: публикуйте через AAB, для внешнего распространения держите signed universal APK при необходимости.

Частые ошибки

  • INSTALL_PARSE_FAILED_NO_CERTIFICATES — APK не подписан или подпись некорректна.
  • "Certificate has expired" — неверная validity при генерации keystore.
  • Передача паролей в репозиторий — компрометация ключа.
  • Несовпадение alias/паролей в gradle.properties и build.gradle.

FAQ

  • Как восстановить утраченный keystore? — Невозможно восстановить; придётся выпускать новое приложение с другим пакетом.
  • Можно ли подписывать на CI? — Да. Храните keystore и пароли в защищённых секретах CI (не в репозитории).
  • Нужен ли zipalign если использую apksigner? — zipalign рекомендуется до подписи; современный apksigner не заменяет выравнивание.

Следуя этим инструкциям, вы за пару шагов подготовите корректно подписанный релизный APK/AAB и избежите большинства ошибок при публикации.