Почему APK-файлы необходимо подписывать?
Перед установкой каждое приложение Android должно быть подписано цифровой подписью. Подпись служит нескольким целям:
- Проверяет личность разработчика приложения
- Гарантирует, что APK не был подделан.
- Позволяет Android сопоставлять обновления приложений с оригиналом
- Требуется для установки на все устройства Android
Требуется настольный инструмент
Для подписания APK требуются инструменты командной строки (JDK/Android SDK). Это невозможно сделать в веб-браузере. Следуйте приведенному ниже руководству, чтобы подписать APK-файлы на своем компьютере.
Способ 1. Войдите с помощью apksigner (рекомендуется).
apksigner — это официальный инструмент подписи APK от Google, включенный в инструменты сборки Android SDK.
Шаг 1. Создайте хранилище ключей
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Шаг 2. Подпишите APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Шаг 3. Проверьте подпись
apksigner verify --verbose signed-app.apk
Способ 2. Подписание с помощью jarsigner (устаревшая версия)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Шаг 4: Zipalign (важно!)
После подписания оптимизируйте APK с помощью zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Подписание отладки (для тестирования)
В целях тестирования вы можете использовать хранилище ключей отладки Android по умолчанию:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
Сравнение инструментов подписи
| Параметр | апксигнер | jarsigner |
|---|---|---|
| Подпись V1 | ||
| Подпись V2 | ||
| Подпись V3 | ||
| Рекомендуется | Наследие |
APK Signer — Часто задаваемые вопросы
Распространенные вопросы о подписании APK, хранилищах ключей и подписании кода Android
Почему порядок выравнивания (zipalign перед apksigner) важен на Android 11–15
Одна из наиболее частых ошибок, которые допускают разработчики и моддеры при подписании измененного или объединенного APK, — это запуск zipalign после для подписи пакета или использование устаревшей утилиты Java jarsigner вместо Android SDK от Google apksigner. Поскольку схемы подписи APK v2 и v3 вычисляют криптографический хэш по всей двоичной структуре ZIP-архива, изменение смещений байтов с помощью zipalign после подписания немедленно делает недействительным блок подписи v2/v3.
Начиная с Android 11 (уровень API 30) и строго применяется в Android 14 и 15, PackageManager требует двух необсуждаемых условий для любого APK, ориентированного на современные уровни SDK:
- Несжатый 4-байтовый выровненный resources.arsc: Скомпилированная таблица ресурсов (resources.arsc) должна храниться в несжатом виде (STORED) и выровнена по 4-байтовой границе, чтобы Android мог отображать ее в памяти (mmap) напрямую, не копируя ее в ОЗУ. Всегда выполняйте подпись zipalign -p -f -v 4 input.apk aligned.apk до.
- Обязательный блок подписи v2+: Подписание APK, ориентированного на API 30+, с помощью jarsigner (который записывает только подпись META-INF/ v1) приведет к тому, что Android 11–15 отклонит установку с помощью INSTALL_PARSE_FAILED_NO_CERTIFICATES. Используйте приведенный выше интерактивный генератор команд, чтобы создать точную команду apksigner --v2-signing-enabled=true для вашего хранилища ключей, или проверьте подписанный вывод в нашем Проверка подписи APK.