Защо APK файловете трябва да бъдат подписани?
Всяко приложение за Android трябва да бъде цифрово подписано, преди да може да бъде инсталирано. Подписът служи за няколко цели:
- Потвърждава самоличността на разработчика на приложението
- Гарантира, че APK не е бил манипулиран
- Позволява на Android да сравнява актуализациите на приложението с оригинала
- Изисква се за инсталиране на всички Android устройства
Изисква се инструмент за настолен компютър
Подписването на APK изисква инструменти от командния ред (JDK / Android SDK). Това не може да се направи в уеб браузър. Следвайте ръководството по-долу, за да подписвате APK файлове на вашия компютър.
Метод 1: Подпишете с apksigner (препоръчително)
apksigner е официалният инструмент на Google за подписване на APK, включен в инструментите за изграждане на 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 (Legacy)
# 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
Сравнение на инструментите за подписване
| Показател | apksigner | jarsigner |
|---|---|---|
| Подпис V1 | ||
| Подпис V2 | ||
| Подпис V3 | ||
| Препоръчва се | Наследство |
Подписващ APK — Често задавани въпроси
Често срещани въпроси относно подписването на APK, хранилищата за ключове и подписването на код на Android
Защо редът на подравняване (zipalign Преди apksigner) има значение за Android 11–15
Една от най-честите грешки, които разработчиците и модераторите допускат, когато подписват модифициран или обединен APK, е да стартират zipalign след, подписвайки пакета - или използвайки наследената помощна програма jarsigner на Java вместо apksigner на Google за Android SDK. Тъй като схемата за подписване на 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) директно, без да я копира в RAM. Винаги изпълнявайте zipalign -p -f -v 4 input.apk aligned.apk преди подписване.
- Задължителен блок за подпис v2+: Подписването на APK, насочен към API 30+ с jarsigner (което записва само v1 META-INF/ подпис) ще накара Android 11–15 да отхвърли инсталацията с INSTALL_PARSE_FAILED_NO_CERTIFICATES. Използвайте генератора на интерактивни команди по-горе, за да изградите точната команда apksigner --v2-signing-enabled=true за вашето хранилище за ключове или проверете вашия подписан изход в нашия Проверка на подпис на APK.