Как подписать APK-файл: полное руководство

При попытке установить неподписанный APK-файл Android выдаёт ошибку «Приложение не установлено» или «Пакет имеет неверную подпись» — система отклоняет любой пакет без цифровой подписи, даже если само приложение полностью рабочее. Подпись APK — обязательное требование Android: она подтверждает автора приложения и гарантирует, что код не был изменён после сборки.

Подписать APK можно несколькими способами: через официальную утилиту apksigner из Android SDK, классический jarsigner из JDK, средствами Android Studio или сторонними приложениями прямо на смартфоне. Ниже разберём каждый метод пошагово — от создания собственного ключа до проверки готовой подписи.

Зачем нужна подпись APK и как она работает

Цифровая подпись привязывает приложение к его разработчику через ключевую пару: закрытый ключ хранится у автора, открытый встраивается в APK. При установке Android проверяет, что содержимое пакета соответствует сертификату, и отказывает в установке при любом несовпадении.

Также подпись играет ключевую роль при обновлениях. Система разрешит обновить приложение поверх установленного только в том случае, если новая версия подписана тем же ключом, что и старая. Потеряли ключ — потеряли возможность обновлять уже опубликованное приложение: пользователям придётся удалять старую версию и ставить новую с нуля.

  • 🔐 Подтверждение авторства — система знает, кто создал приложение.
  • 🛡️ Защита от модификации — изменённый APK не пройдёт проверку подписи.
  • 🔄 Контроль обновлений — апдейт возможен только с тем же ключом.
  • 📦 Требование Google Play — без подписи пакет не принимается в каталог.

Создание ключа подписи (keystore)

Прежде чем подписывать APK, нужен файл-хранилище ключей — keystore. Его создают один раз и используют для всех своих приложений. Стандартный инструмент — утилита keytool, входящая в состав Java JDK.

Откройте командную строку и выполните команду, подставив своё имя файла и псевдоним ключа:

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

Утилита последовательно спросит пароль хранилища, ваше имя, организацию и пароль ключа. Запишите эти данные и храните файл my-release-key.jks в надёжном месте с резервной копией.

⚠️ Внимание: потерянный keystore и пароль к нему восстановить невозможно. Без исходного ключа вы не сможете обновлять приложение ни в Google Play, ни на устройствах пользователей. Сделайте минимум две резервные копии файла на разных носителях.

Подпись APK через apksigner

apksigner — официальный инструмент Google, входящий в состав Android SDK Build-Tools. Это рекомендуемый способ: утилита поддерживает современные схемы подписи v2 и v3, которые проверяют пакет целиком, а не пофайлово.

Команда подписи выглядит так:

apksigner sign --ks my-release-key.jks --out app-signed.apk app-unsigned.apk

После ввода пароля утилита создаст подписанный файл app-signed.apk. Если вы собираете приложение самостоятельно, учтите важный нюанс: при использовании zipalign (выравнивание ресурсов для оптимизации) его нужно выполнять до подписи, иначе подпись станет недействительной.

☑️ Проверка перед подписью APK

Выполнено: 0 / 5

Альтернативные способы подписи

Если apksigner недоступен, есть другие варианты. Классический jarsigner из JDK создаёт подпись схемы v1 — она совместима со старыми версиями Android, но уязвимее к модификациям пакета:

jarsigner -verbose -keystore my-release-key.jks app.apk my-alias

Разработчики, работающие в Android Studio, могут подписать приложение прямо из интерфейса: меню Build → Generate Signed Bundle / APK, выбор keystore, псевдонима и паролей — среда сама выполнит все шаги, включая выравнивание.

Третий путь — приложения для подписи прямо на смартфоне (например, APK Signer и аналоги). Они удобны для быстрой подписи модифицированных пакетов, но генерируют тестовый ключ, который не подходит для публикации в магазинах приложений.

📊 Каким способом вы подписываете APK?
apksigner из командной строки
Android Studio
jarsigner
Приложение на смартфоне

Сравнение способов подписи

СпособСхемы подписиДля кого подходитПубликация в Google Play
apksignerv1, v2, v3Продвинутые пользователи, CI-сборкаДа
jarsignerТолько v1Устаревшие проекты, старые устройстваОграниченно
Android Studiov1, v2, v3Разработчики приложенийДа
Приложения на смартфонеv1 (тестовый ключ)Локальное тестированиеНет

Проверка подписи APK

После подписи обязательно убедитесь, что всё прошло корректно. Для этого у apksigner есть режим верификации:

apksigner verify --verbose --print-certs app-signed.apk

Команда покажет, какими схемами подписан пакет, и выведет данные сертификата: отпечатки SHA-256, срок действия, владельца. Если верификация завершилась без ошибок — APK готов к установке.

Проверить подпись можно и на самом устройстве: установите файл через файловый менеджер. Если система не выдала предупреждений о несовпадении подписи и приложение запустилось — подпись корректна. Ошибка «приложение не установлено» при обновлении обычно означает, что новая версия подписана другим ключом.

⚠️ Внимание: переподписывание чужого APK своим ключом делает невозможным его установку поверх оригинала — система увидит конфликт подписей. Сначала удалите старую версию, но учтите, что данные приложения при этом будут потеряны.
Что такое схемы подписи v1, v2 и v3

v1 (JAR-подпись) — самая старая, проверяет файлы внутри пакета по отдельности. v2 (появилась в Android 7.0) подписывает весь APK целиком, быстрее проверяется и надёжнее защищает от модификации. v3 (Android 9+) добавляет ротацию ключей — возможность сменить ключ без потери обновлений. Современные устройства поддерживают все три схемы одновременно.

Типичные ошибки и их решения

Чаще всего при подписи встречаются три проблемы. Первая — ошибка keystore password was incorrect: неверный пароль хранилища. Проверьте раскладку клавиатуры и регистр, а если пароль утерян — keystore придётся создавать заново.

Вторая — Failed to load signer или ошибки чтения ключа: файл keystore повреждён или путь указан неверно. Убедитесь, что путь не содержит кириллицы и пробелов, либо заключите его в кавычки.

Третья ситуация — APK подписан, но не устанавливается. Возможные причины: конфликт с уже установленной версией, подписанной другим ключом; zipalign выполнен после подписи; либо пакет подписан только схемой v2, а устройство работает на старом Android. В последнем случае добавьте при подписи флаги совместимости:

apksigner sign --ks my-release-key.jks --v1-signing-enabled true --v2-signing-enabled true app.apk

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

Можно ли подписать APK без компьютера?

Да, существуют Android-приложения для подписи пакетов прямо на смартфоне. Однако они создают тестовый ключ, который не подходит для публикации в Google Play и обновления уже установленных приложений. Для серьёзной работы используйте apksigner или Android Studio.

Что делать, если потерял keystore?

Восстановить файл невозможно. Если приложение опубликовано в Google Play, можно подключить Play App Signing и через поддержку Google сбросить ключ загрузки. Для приложений, распространяемых напрямую, придётся подписывать новым ключом — пользователям потребуется удалить старую версию перед установкой.

Чем apksigner лучше jarsigner?

apksigner поддерживает современные схемы подписи v2 и v3, которые проверяют пакет целиком и защищают от модификации отдельных файлов. jarsigner создаёт только устаревшую v1-подпись. Google рекомендует именно apksigner для всех новых приложений.

Нужно ли подписывать APK для личного использования?

Да, Android не установит неподписанный пакет в принципе. Но для личных нужд достаточно автоматической debug-подписи, которую Android Studio создаёт при каждой сборке, — отдельный keystore не обязателен.

Можно ли изменить APK после подписи?

Нет. Любое изменение содержимого пакета делает подпись недействительной, и система откажется его устанавливать. После правок APK нужно подписывать заново тем же ключом.