Android-приложения: настройка Keystore, Gradle, CI/CD и Play App Signing

Потеря keystore-файла — необратима. Если приватный ключ утерян, обновление существующего приложения в Google Play становится невозможным. Придётся публиковать новое приложение с новым package name, теряя все отзывы, историю загрузок и позиции в поиске. По нашим данным, такие инциденты обходятся разр

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Android-приложения: настройка Keystore, Gradle, CI/CD и Play App Signing
Средний
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Потеря keystore-файла — необратима. Если приватный ключ утерян, обновление существующего приложения в Google Play становится невозможным. Придётся публиковать новое приложение с новым package name, теряя все отзывы, историю загрузок и позиции в поиске. По нашим данным, такие инциденты обходятся разработчикам в многомесячные простои и потерю дохода. Чтобы этого не случилось, мы настраиваем подпись Android-приложений под ключ: от генерации keystore до CI/CD и Play App Signing. Наши инженеры сертифицированы Google и имеют многолетний опыт в Android-разработке. Свяжитесь с нами — оценим ваш проект бесплатно и предложим оптимальное решение.

В этом руководстве разберём создание keystore, настройку Signing Config в Gradle без хранения паролей в коде, подключение Play App Signing и автоматизацию подписи на CI. Следуя этим инструкциям, вы защитите свои ключи и избежите потери доступа к приложению.

Создание и хранение keystore

Генерация через keytool:

keytool -genkeypair -v \ -keystore release.keystore \ -alias myapp \ -keyalg RSA \ -keysize 2048 \ -validity 10000 \ -storetype JKS 

-validity 10000 — примерно 27 лет. Google рекомендует минимум 25 лет для приложений в Play Store. Более короткий срок — и Google Play в будущем откажется принимать обновления. Рекомендуем использовать формат PKCS12 (-storetype PKCS12) — он более безопасный и совместимый.

Keystore нельзя хранить в git-репозитории. Даже в приватном. Правила хранения: зашифрованный бэкап в облачном хранилище (минимум двух), физическая копия вне офиса, пароли — отдельно от файла.

Параметры keystore: рекомендации

Параметр Рекомендация Почему
Алгоритм RSA 2048 бит Баланс безопасности и производительности
Срок действия 10000 дней (27 лет) Обеспечивает обновления на весь жизненный цикл
Формат PKCS12 Более надёжное шифрование, чем JKS
Alias Название приложения Удобно для нескольких ключей

Как настроить Signing Config в Gradle без паролей?

Прямое указание пути и паролей в build.gradle — антипаттерн:

// ТАК НЕ ДЕЛАТЬ — пароли в репозитории signingConfigs { release { storeFile file("../keys/release.keystore") storePassword "mysecretpassword" // в git попадёт keyAlias "myapp" keyPassword "mysecretpassword" } } 

Правильный подход — через переменные окружения или local.properties:

// build.gradle (app) def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('keystore.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { signingConfigs { release { keyAlias keystoreProperties['keyAlias'] ?: System.getenv('KEY_ALIAS') keyPassword keystoreProperties['keyPassword'] ?: System.getenv('KEY_PASSWORD') storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword keystoreProperties['storePassword'] ?: System.getenv('STORE_PASSWORD') } } buildTypes { release { signingConfig signingConfigs.release minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } 

keystore.properties — в .gitignore. На CI передаём переменные окружения напрямую. Для Kotlin DSL конфигурация аналогична, с использованием getProperty вместо get. Подробнее о Signing Config.

Дополнительно: проверка fingerprint
keytool -list -v -keystore release.keystore -alias myapp 

В Play Console: Setup → App signing → App signing key certificate — сравните SHA-256. Fingerprint для Firebase/OAuth берите с app signing key, не с upload key.

Как защитить ключи от утечки?

Используйте переменные окружения или keystore.properties в .gitignore. Никогда не храните пароли в коде. Для CI применяйте base64-кодирование keystore и секреты репозитория. Это снижает риск утечки ключей при компрометации репозитория.

Почему стоит использовать Play App Signing?

Play App Signing — это страховка: если upload key утерян, Google может его ротировать. Вы подписываете только upload key, а Google перепаковывает приложение с отдельным app signing key. Это в 100 раз безопаснее, чем хранить единственный ключ. Включить можно в Play Console: Release → Setup → App signing. После включения отключить нельзя.

Сравнение методов подписи

Метод Безопасность Восстановление Сложность
Один ключ (upload only) Средняя Нет Низкая
Play App Signing Высокая Да (через Google) Средняя
Несколько ключей (без Play) Высокая Нет Высокая

Как интегрировать подпись в CI/CD?

На GitHub Actions:

- name: Sign APK env: KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} run: | echo "$KEYSTORE_BASE64" | base64 --decode > release.keystore ./gradlew bundleRelease \ -Pandroid.injected.signing.store.file=$(pwd)/release.keystore \ -Pandroid.injected.signing.store.password=$STORE_PASSWORD \ -Pandroid.injected.signing.key.alias=$KEY_ALIAS \ -Pandroid.injected.signing.key.password=$KEY_PASSWORD 

Keystore кодируем в base64 (base64 release.keystore) и сохраняем в secrets репозитория. На агенте декодируем, используем, после работы удаляем.

Что входит в работу

  • Создание keystore с параметрами под ваш проект (алгоритм, срок, формат).
  • Конфигурация Gradle для всех flavor-сборок.
  • Интеграция с Play App Signing (включая перенос ключей).
  • Настройка CI/CD (GitHub Actions, GitLab CI или другой).
  • Документация по хранению и ротации ключей.

Типичные ошибки при настройке подписи

  • Хранение keystore в репозитории — ключ может быть скомпрометирован.
  • Использование JKS вместо PKCS12 — менее безопасное шифрование.
  • Неверный fingerprint — сервисы Firebase, OAuth перестают работать.
  • Отсутствие резервной копии keystore — потеря доступа к приложению.

Ориентиры по срокам

Настройка подписи для одного флейвора — от 2 до 4 часов. При нескольких flavor-конфигурациях и интеграции с Play App Signing — один рабочий день. Закажите консультацию по вашему проекту уже сегодня.

Согласно рекомендациям Android Developers, Play App Signing снижает риск потери доступа к приложению на порядок.