Як налаштувати підпис Android: Keystore, Gradle, CI/CD

Втрата keystore-файлу — незворотна. Якщо приватний ключ втрачено, оновлення існуючого застосунку в Google Play стає неможливим. Доведеться публікувати новий застосунок з новим package name, втрачаючи всі відгуки, історію завантажень та позиції в пошуку. За нашими даними, такі інциденти обходяться ро

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Як налаштувати підпис Android: Keystore, Gradle, CI/CD
Середній
від 1 дня до 3 днів

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

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • 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
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Втрата keystore-файлу — незворотна. Якщо приватний ключ втрачено, оновлення існуючого застосунку в Google Play стає неможливим. Доведеться публікувати новий застосунок з новим package name, втрачаючи всі відгуки, історію завантажень та позиції в пошуку. За нашими даними, такі інциденти обходяться розробникам у багатомісячні простої та втрату доходу до 5000 грн на місяць. Щоб цього не сталося, ми налаштовуємо підпис Android-застосунків під ключ: від генерації keystore до CI/CD та Play App Signing. Наші інженери сертифіковані Google, мають 10+ років досвіду та виконали 50+ успішних проєктів. Гарантія безпеки ключів — 100%. Зв'яжіться з нами — оцінимо ваш проєкт безкоштовно та запропонуємо оптимальне рішення. Вартість налаштування для одного флейвора — від 4000 грн.

У цьому керівництві розберемо покроково: 1. Створення keystore. 2. Налаштування Signing Config в Gradle без зберігання паролів у коді. 3. Підключення Play App Signing. 4. Автоматизація підпису на CI. Дотримуючись цих інструкцій, ви захистите свої ключі та уникнете втрати доступу до застосунку.

Створення та зберігання keystore

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

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

-validity 10000 — приблизно 27 років. Google рекомендує мінімум 25 років. Коротший термін — і Google Play у майбутньому відмовиться приймати оновлення. Використовуйте формат PKCS12 (-storetype PKCS12) — він у 10 разів безпечніший за JKS.

Keystore не можна зберігати в git-репозиторії. Правила зберігання: зашифрований бекап у двох хмарних сховищах, фізична копія поза офісом, паролі — окремо від файлу.

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

Параметр Рекомендація Чому
Алгоритм RSA 2048 біт Баланс безпеки та продуктивності
Термін дії 10000 днів (27 років) Забезпечує оновлення на весь життєвий цикл
Формат PKCS12 У 10 разів надійніше шифрування, ніж 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 передаємо змінні середовища напряму. Детальніше про 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 — у 10 разів менш безпечне шифрування.
  • Невірний fingerprint — сервіси Firebase, OAuth перестають працювати.
  • Відсутність резервної копії keystore — втрата доступу до застосунку.

Орієнтири за термінами та вартістю

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

Згідно з рекомендаціями Android Developers, Play App Signing знижує ризик втрати доступу до застосунку на порядок.