Android

Создание Keystore для Android: пошаговая инструкция подписи APK

Гайд объясняет, зачем нужен keystore и как безопасно сгенерировать его через командную строку. Вы получите готовый файл подписи и настроите его в Android Studio для релиза.

Обновлено 5 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Android Studio 2023.1+JDK 8+Google Play Console

Введение / Зачем это нужно

Keystore — это цифровая подпись, которая подтверждает авторство вашего приложения и гарантирует целостность кода. Магазины приложений, включая Google Play, требуют, чтобы каждая релизная сборка была подписана одним и тем же ключом. Если вы попытаетесь загрузить обновление с другим сертификатом, публикация будет отклонена, а пользователям придётся устанавливать приложение заново.

После выполнения этого гайда у вас появится готовый .jks файл, правильно настроенный для подписи, а также понимание, как безопасно его хранить и интегрировать в процесс сборки.

Требования / Подготовка

Перед началом убедитесь, что соблюдены базовые условия:

  • Установлен JDK 8 или новее (утилита keytool входит в его состав)
  • Доступ к терминалу (командная строка, PowerShell или Bash)
  • Менеджер паролей для надёжного хранения учётных данных
  • Выбранная директория с ограниченным доступом (желательно не в корневой папке проекта)

Шаг 1: Откройте терминал и подготовьте директорию

Запустите терминал и создайте отдельную папку для ключей. Хранить их рядом с исходным кодом или в открытых репозиториях запрещено.

mkdir -p ~/android_keys
cd ~/android_keys

💡 Совет: Если вы работаете в Windows, используйте mkdir android_keys и cd android_keys. Путь можно разместить на отдельном логическом диске или в зашифрованном контейнере.

Шаг 2: Сгенерируйте ключ через keytool

Выполните команду создания пары ключей. Параметры ниже соответствуют современным стандартам безопасности Google Play.

keytool -genkeypair -v \
  -keystore my_app_release.jks \
  -keyalg RSA \
  -keysize 2048 \
  -validity 10000 \
  -alias release_alias

Что делает команда:

  • -genkeypair: создаёт пару закрытый/открытый ключ
  • -keystore: задаёт имя файла хранилища
  • -keyalg и -keysize: используют алгоритм RSA длиной 2048 бит (оптимальный баланс безопасности и производительности)
  • -validity 10000: устанавливает срок действия ~27 лет
  • -alias: уникальное имя ключа внутри файла (запомните его)

Шаг 3: Заполните метаданные и установите пароли

После запуска терминал запросит данные в интерактивном режиме. Отвечайте последовательно:

  1. Введите пароль для хранилища и подтвердите его.
  2. Укажите имя и фамилию, название подразделения, организации, города и страны (можно оставить поля пустыми, нажав Enter, но для корпоративных проектов лучше заполнить).
  3. Подтвердите сгенерированную строку DN (Distinguished Name).
  4. Введите пароль для release_alias. Разрешено использовать тот же пароль, что и для хранилища, если нажмёте Enter.

⚠️ Важно: Пароли нельзя восстановить. Запишите их сразу в менеджер паролей. Символы с клавиатуры не отображаются при вводе — это нормально.

Шаг 4: Создайте резервную копию файла

После успешной генерации в директории появится my_app_release.jks. Сделайте минимум две копии:

  • Зашифрованный архив на внешний носитель
  • Резервная копия в облаке с двухфакторной аутентификацией

Проверьте целостность файла:

ls -la my_app_release.jks

Шаг 5: Подключите хранилище к проекту

  1. Откройте Android Studio.
  2. Выберите Build → Generate Signed Bundle / APK.
  3. В поле Key store path укажите путь к my_app_release.jks.
  4. Введите Key store password, Key alias и Key password.
  5. Нажмите Next, выберите release конфигурацию и завершите сборку.

Для автоматизации добавьте данные в build.gradle (модуль приложения), используя переменные окружения или keystore.properties, чтобы ключи не попали в систему контроля версий.

Проверка результата

Убедитесь, что файл подписи корректен и содержит нужные данные:

keytool -list -v -keystore my_app_release.jks

В выводе найдите строку Entry type: PrivateKeyEntry. Проверьте срок действия (Valid from / Valid until) и совпадение Alias name с тем, что вы указали при создании. Если команда выводит список без ошибок, файл готов к использованию в CI/CD-пайплайнах или ручных сборках.

Возможные проблемы

  • keytool: command not found или 'keytool' is not recognized — утилита не добавлена в системный PATH. Укажите полный путь к исполняемому файлу JDK (например, C:\Program Files\Java\jdk-17\bin\keytool.exe) или обновите переменные окружения.
  • java.security.InvalidKeyException: Illegal key size or default parameters — версия JDK устарела или отсутствуют JCE Unlimited Strength. Обновите JDK до 8u161+ или 11+.
  • java.io.IOException: Keystore was tampered with, or password was incorrect — проверьте раскладку клавиатуры, отключите автозамену символов и убедитесь, что не включён Caps Lock. При вводе через терминал используйте копирование из менеджера паролей.
  • Validity too short — Google Play отклоняет ключи со сроком менее 25 лет. Пересоздайте хранилище с флагом -validity 10000 или выше.

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

Что будет, если я потеряю файл keystore?
Можно ли использовать один keystore для нескольких приложений?
Какой срок действия ключа выбрать?

Полезное

Откройте терминал и подготовьте директорию
Сгенерируйте ключ через keytool
Заполните метаданные и установите пароли
Создайте резервную копию файла
Подключите хранилище к проекту

Эта статья помогла вам решить проблему?