Как создать и защитить release key для Android‑релиза

Release key — это криптографический ключ в файле keystore (.jks), которым подписывают релизные APK/AAB; без него нельзя обновлять пакет, а при утере без Play App Signing вы потеряете возможность выпускать апдейты. Создать ключ можно через Android Studio или keytool, настроить подпись в Gradle и хранить keystore в зашифрованном хранилище с резервными копиями.

Что такое release key и почему он важен

Release key идентифицирует приложение, гарантирует целостность и позволяет устанавливать обновления поверх предыдущих версий. Отличается от debug‑key тем, что debug‑ключ автоматически генерируется для тестов и не подходит для публикации. Если новая версия подписана другим ключом — обновление не установится.

Если вы потеряете релизный ключ и не используете Google Play App Signing с upload‑ключом — восстановить его невозможно; придётся выпускать приложение с новым package name.

Как создать keystore и настроить подпись (быстро и безопасно)

  1. Через Android Studio (GUI)
  • Build → Generate Signed Bundle / APK → Create new...
  • Укажите путь (например ~/keys/myapp-release.jks), пароли, alias и срок действия (25–50 лет).
  • Сохраните файл и зафиксируйте путь, alias и пароли в безопасном месте.
  1. Через keytool (CLI) Пример:
keytool -genkeypair -v \
  -keystore myapp-release.jks \
  -keyalg RSA -keysize 2048 \
  -validity 9125 \
  -alias myapp_release

Утилита запросит пароли и данные субъекта.

  1. Настройка Gradle (рекомендуется хранить пароли вне репозитория) Создайте файл keystore.properties (в .gitignore):
storeFile=/полный/путь/myapp-release.jks
storePassword=STORE_PASS
keyAlias=myapp_release
keyPassword=KEY_PASS

В build.gradle подключите свойства и добавьте signingConfigs.release, затем укажите signingConfig в buildTypes.release.

  1. Подпись артефактов
  • APK: ./gradlew assembleRelease → apksigner sign --ks myapp-release.jks --ks-key-alias myapp_release app-release-unsigned.apk
  • AAB: ./gradlew bundleRelease. При публикации в Google Play используйте upload‑key (если включён Play App Signing).

Для CI храните keystore и пароли в секретах окружения (GitHub/GitLab secrets) и генерируйте keystore.properties на этапе сборки.

Как хранить и защищать релизный ключ

  • Ограничьте доступ: только ответственные сотрудники.
  • Храните в зашифрованных менеджерах паролей (например, корпоративный Vault) и/или зашифрованных облачных хранилищах.
  • Делайте минимум две независимые резервные копии (шифрованный облак + офлайн‑носитель).
  • Документируйте процедуру релиза и владельцев ключей.
  • Для публикации в Google Play используйте Play App Signing: основной ключ хранит Google, вы используете upload‑key, который можно сбросить при компрометации.

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

  • Keystore в репозитории без шифрования — риск компрометации.
  • Пароли в build.gradle — видны всем участникам.
  • Использование debug‑ключа для релиза — блокировка в сторах и потеря контроля.
  • Один ключ для всех продуктов — компрометация одного приложения затрагивает остальные.

FAQ

  • Что делать, если keystore утерян?
    • Если не используется Play App Signing — доступных вариантов нет, нужно выпускать новое приложение с другим package name. Если используется Play App Signing и утерян upload‑key — можно сбросить upload‑key через Play Console.
  • Можно ли использовать один ключ для нескольких приложений?
    • Технически да, но это повышает риск; лучше разделять по продуктам.
  • Как проверить, чем подписан APK?
    • apksigner verify --print-certs app-release.apk покажет информацию о сертификате.

Короткий чек‑лист перед публикацией:

  • Создан и сохранён keystore + резервные копии.
  • Пароли не в репозитории; используются secrets/keystore.properties вне VCS.
  • Gradle настроен на release‑signing.
  • APK/AAB подписаны и проверены.
  • При публикации в Google Play — настроен Play App Signing / upload‑key.