Введение / Зачем это нужно
Подпись APK — обязательный шаг перед установкой приложения на устройство или публикацией в Google Play. Подписанный APK подтверждает авторство разработчика и гарантирует целостность бинарного файла. В этой статье вы узнаете два способа подписания APK: встроенный в Android Studio и консольный с помощью jarsigner. После выполнения инструкции у вас будет подписанный APK, готовый к установке.
Требования / Подготовка
- Android Studio версии 2023.2 или выше.
- JDK 11 или более новая версия (для
jarsigner). - Android SDK Build‑Tools 34.0+.
- Созданный keystore (сертификат). Если у вас его нет, сгенерируйте его в Android Studio (см. шаг 1).
- Доступ к командной строке (Terminal на macOS/Linux, Command Prompt или PowerShell на Windows).
Пошаговая инструкция
Шаг 1: Создать подписной сертификат в Android Studio
- Запустите Android Studio и создайте новый проект (
File > New > New Project). - На экране настройки проекта нажмите кнопку «Add a sign‑in certificate».
- Выберите «Create a new keystore».
- Укажите:
- Keystore path – путь к файлу
.jks(рекомендуется хранить его вне репозитория). - Keystore password – надёжный пароль.
- Alias – имя ключа (например,
my-key-alias). - Key password – пароль для приватного ключа (может совпадать с keystore password).
- Valid for – срок действия (10 лет — стандартный вариант).
- Keystore path – путь к файлу
- Нажмите OK. Android Studio сгенерирует keystore и покажет путь к нему.
💡 Совет: Сохраните keystore в безопасном месте (например, в зашифрованном контейнере). Без него вы не сможете подписать будущие APK.
Шаг 2: Подписать APK через Android Studio
- В Android Studio перейдите к модулю проекта (
app). - Выберите Build > Generate Signed Bundle / APK.
- В мастере выберите APK и нажмите Next.
- Выберите Create new → укажите созданный keystore (
.jksфайл) и введите пароли. - Установите папку для сохранения подписанного APK (например,
app/build/outputs/apk/debug). - Нажмите Finish. Android Studio соберёт и подпишет APK в указанной директории.
Шаг 3: Подписать APK с помощью jarsigner из командной строки
- Откройте терминал (или Command Prompt).
- Перейдите к папке с исходным APK, который нужно подписать (обычно
app/build/outputs/apk/debug).cd /path/to/your/project/app/build/outputs/apk/debug - Выполните команду
jarsigner. Замените пулевые значения на реальные:jarsigner -keystore /full/path/to/your/keystore.jks \ -storepass YOUR_STORE_PASSWORD \ -keypass YOUR_KEY_PASSWORD \ -signedjar MySigned.apk app-debug.apk my-key-alias-keystore— путь к файлу.jks.-storepass— пароль keystore.-keypass— пароль ключа.-signedjar— имя выходного подписанного APK.app-debug.apk— исходный файл.my-key-alias— псевдоним ключа, созданный ранее.
- Если всё прошло успешно, вы увидите сообщение
jar подписан.
⚠️ Важно: Не указывайте
-storepassи-keypassв командной строке через переменные окружения, если только вы не уверены в безопасности среды.
Шаг 4: Проверить подпись APK
Для подтверждения корректности подписи используйте apksigner (входит в состав Android SDK Build‑Tools).
apksigner verify MySigned.apk
Вы должны увидеть что-то вроде:
Verified using v1 scheme (SHA256 with RSA signature).
Verified using v2 scheme (APK Signature Scheme v2).
Verified using v3 scheme (APK Signature Scheme v3).
Если какие-то схемы отсутствуют, это может означать, что APK подписан не полностью.
Проверка результата
- Скопируйте подписанный APK (
MySigned.apk) на устройство. - Установите его через ADB (
adb install MySigned.apk) или перетащите в эмулятор. - Проверьте, что приложение запускается без предупреждений о «неустановленных источниках» (если вы разрешили установку из неизвестных источников).
- Для публикации в Google Play убедитесь, что APK подписан тем же сертификатом, что и ранее опубликованные версии — Play Console автоматически проверит подпись при загрузке.
Возможные проблемы
- Ошибка «Keystore was tampered with, modified, or corrupted»
- Причина: файл keystore повреждён или изменён.
- Решение: восстановите оригинальный keystore из резервной копии или сгенерируйте новый.
- «Не удалось проверить подпись» в apksigner
- Причина: использован неправильный keystore или пароль.
- Решение: проверьте пароли, убедитесь, что псевдоним ключа совпадает, и переподпишите APK.
- APK всё равно отмечается как «неизвестный источник»
- Причина: на устройстве отключена установка из неизвестных источников.
- Решение: разрешите установку в настройках безопасности (
Settings > Security > Install unknown apps).
- Размер APK увеличился неожиданно
- Причина: подпись добавляет несколько килобайт.
- Это нормально; размер не влияет на функциональность приложения.