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

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

Подпись APK — это криптографическое подтверждение авторства и целостности приложения. Она нужна не только для публикации в Google Play, но и для любой установки на устройство: отладочная сборка, модифицированный клиент, собственная разработка — всё это требует подписи. В этой статье разберём, как создать хранилище ключей, подписать APK через apksigner, Android Studio и сторонние утилиты, а также как проверить результат и исправить типичные ошибки.

Зачем APK нужна цифровая подпись

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

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

Существует несколько версий схем подписи: v1 (JAR signing), v2 и v3. Современные версии Android требуют как минимум v2-подпись, а утилита apksigner по умолчанию применяет все поддерживаемые схемы одновременно.

Что понадобится для подписи APK

Для работы потребуется компьютер с установленным Java Development Kit (JDK) — именно он поставляет утилиту keytool для создания ключей. Для подписи используется инструмент apksigner, который входит в состав Android SDK Build-Tools. Если у вас установлена Android Studio, оба компонента уже есть на диске.

  • 🔑 JDK — для генерации keystore через утилиту keytool;
  • 📦 Android SDK Build-Tools — оттуда берётся apksigner и zipalign;
  • 🛠 Android Studio — опционально, если предпочитаете графический интерфейс;
  • 📱 APK-файл — неподписанный (unsigned) или подписанный debug-ключом, который нужно переподписать.

Если Android Studio не установлена, apksigner можно найти в каталоге SDK по пути вида Android/Sdk/build-tools/<версия>/apksigner. Точное расположение зависит от того, куда был установлен SDK.

Создание хранилища ключей (keystore)

Первый шаг — сгенерировать собственный keystore, то есть защищённый файл с закрытым ключом и сертификатом. Для этого используется команда keytool из состава JDK. Откройте терминал или командную строку и выполните:

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

Утилита последовательно спросит пароль хранилища, имя, организацию и другие поля сертификата, а затем пароль ключа. Запомните или надёжно сохраните оба пароля и алиас (my-alias в примере) — без них подписать приложение этим ключом позже не получится.

⚠️ Внимание: файл keystore и пароли к нему нельзя восстановить. Храните резервную копию хранилища в безопасном месте — потеря ключа означает невозможность обновлять приложение под той же подписью.

Срок действия сертификата в примере задан параметром -validity 10000 (в днях). Для собственных проектов этого более чем достаточно; при публикации в Google Play рекомендуется срок действия, существенно превышающий предполагаемый жизненный цикл приложения.

📊 Как вы чаще всего подписываете APK?
Через Android Studio
Через apksigner в командной строке
Через сторонние утилиты на ПК
Прямо на смартфоне

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

Способ с apksigner — официальный и самый контролируемый. Перед подписью рекомендуется выровнять пакет утилитой zipalign — это оптимизирует чтение ресурсов на устройстве:

zipalign -v 4 app-unsigned.apk app-aligned.apk

Затем выполняется сама подпись:

apksigner sign --ks my-release-key.keystore --out app-signed.apk app-aligned.apk

Утилита запросит пароль хранилища и пароль ключа, после чего создаст подписанный файл app-signed.apk. Проверить корректность подписи можно командой apksigner verify --print-certs app-signed.apk — она выведет данные сертификата и список применённых схем подписи.

☑️ Контрольный список перед установкой APK

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

Если APK уже был подписан другим ключом (например, debug-ключом), перед подписью своим ключом старую подпись нужно удалить или переподписать файл — apksigner при подписании заменяет существующую подпись, но стоит убедиться, что внутри пакета не осталось конфликтующих файлов META-INF от сторонних инструментов.

Подпись через Android Studio

Для разработчиков самый простой путь — встроенный мастер Android Studio. Он избавляет от ручного ввода команд и сам заботится о выравнивании и выборе схем подписи.

  • 🧭 Откройте меню Build → Generate Signed Bundle / APK;
  • 📄 Выберите вариант APK и нажмите Next;
  • 🔐 Укажите путь к keystore (или создайте новый кнопкой Create new), введите пароли и алиас;
  • ✅ Выберите вариант сборки release и версии подписи (рекомендуется отметить V1 и V2);
  • 🚀 Нажмите Finish — подписанный APK появится в указанной папке.

Готовый файл сразу пригоден для установки на устройство. Если сборка завершилась с ошибкой подписи, чаще всего причина в неверном пароле или алиасе — проверьте их командой keytool -list -v -keystore my-release-key.keystore.

Подпись APK на смартфоне и сторонними утилитами

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

На ПК также встречаются графические оболочки вокруг apksigner и jarsigner. Они удобны для разовых задач, но перед использованием стоит проверять, какую версию схемы подписи применяет конкретная утилита: инструменты, работающие только через устаревший jarsigner (схема v1), создадут файл, который откажутся принимать новые версии Android.

⚠️ Внимание: не загружайте свой keystore и не вводите пароли от него в сомнительные онлайн-сервисы «подписи APK». Закрытый ключ, попавший к третьим лицам, позволяет выпускать обновления от вашего имени.

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

СпособСложностьКонтроль над схемами подписиКому подходит
apksigner + keytoolСредняяПолный (v1–v3)Опытным пользователям, автоматизация
Android StudioНизкаяДостаточный (v1/v2)Разработчикам приложений
Приложения на смартфонеНизкаяЗависит от приложенияРазовая подпись без ПК
Графические утилиты на ПКНизкаяЗависит от утилитыМодификация и переподпись APK

Для установки на современные версии Android критично, чтобы подпись включала схему v2 или новее — только v1-подписи недостаточно. Поэтому при выборе инструмента ориентируйтесь на apksigner или решения, построенные на его основе.

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

Самая частая проблема — сообщение «Приложение не установлено» без объяснения причин. Возможные причины: APK не подписан вовсе, подписан устаревшей схемой v1 либо на устройстве уже стоит версия этого приложения с другой подписью. В последнем случае помогает удаление установленной версии (с потерей её данных) либо подпись тем же ключом, что и раньше.

Вторая типичная ситуация — ошибка INSTALL_PARSE_FAILED_NO_CERTIFICATES. Она прямо указывает на отсутствие валидных сертификатов в пакете: переподпишите файл через apksigner и проверьте результат командой verify.

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

Как узнать, каким ключом подписан установленный APK

Выполните на ПК команду apksigner verify --print-certs app.apk и сравните SHA-256 отпечаток сертификата с отпечатком нового файла. Если отпечатки совпадают — обновление пройдёт штатно, если нет — потребуется удаление старой версии.

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

Можно ли установить APK без подписи?

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

Чем отличается debug-подпись от release-подписи?

Debug-ключ генерируется автоматически средой разработки и предназначен только для тестирования. Release-ключ вы создаёте сами через keytool — именно он используется для публикации и распространения приложения, и именно его нужно беречь.

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

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

Можно ли переподписать чужой APK своим ключом?

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

Нужно ли выравнивать APK через zipalign после подписи?

Нет, порядок обратный: сначала zipalign, затем подпись через apksigner. Если выровнять файл после подписания, подпись станет недействительной, так как содержимое пакета изменится.