Как создать и защитить 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 и настроить подпись (быстро и безопасно)
- Через Android Studio (GUI)
- Build → Generate Signed Bundle / APK → Create new...
- Укажите путь (например ~/keys/myapp-release.jks), пароли, alias и срок действия (25–50 лет).
- Сохраните файл и зафиксируйте путь, alias и пароли в безопасном месте.
- Через keytool (CLI) Пример:
keytool -genkeypair -v \
-keystore myapp-release.jks \
-keyalg RSA -keysize 2048 \
-validity 9125 \
-alias myapp_release
Утилита запросит пароли и данные субъекта.
- Настройка Gradle (рекомендуется хранить пароли вне репозитория) Создайте файл keystore.properties (в .gitignore):
storeFile=/полный/путь/myapp-release.jks
storePassword=STORE_PASS
keyAlias=myapp_release
keyPassword=KEY_PASS
В build.gradle подключите свойства и добавьте signingConfigs.release, затем укажите signingConfig в buildTypes.release.
- Подпись артефактов
- 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.