Автоматизированный процесс:
Воспользуйтесь этим инструментом (использует новый apksigner от Google):
https://github.com/patrickfav/uber-apk-signer
Отказ от ответственности: я разработчик :)
Ручной процесс:
Шаг 1. Создайте хранилище ключей (только один раз)
Вам нужно один раз создать хранилище ключей и использовать его для подписи вашего unsigned
apk. Используйте предоставленный JDK, найденный вkeytool
%JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Шаг 2 или 4: Zipalign
zipalign
который является инструментом, предоставляемым Android SDK, например, %ANDROID_HOME%/sdk/build-tools/24.0.2/
является обязательным шагом оптимизации, если вы хотите загрузить apk в Play Store.
zipalign -p 4 my.apk my-aligned.apk
Примечание: при использовании старого jarsigner
вам необходимо выполнить zipalign ПОСЛЕ подписания. При использовании нового apksigner
метода вы делаете это ДО подписания (я знаю, что сбивает с толку). Вызов zipalign перед apksigner работает нормально, потому что apksigner сохраняет выравнивание и сжатие APK (в отличие от jarsigner).
Вы можете проверить выравнивание с помощью
zipalign -c 4 my-aligned.apk
Шаг 3. Подпишите и подтвердите
Использование инструментов сборки 24.0.2 и старше
Используйте jarsigner
которые, как Keytool, приходит с распределением JDK найти в %JAVA_HOME%/bin/
и использовать его так:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
и можно проверить с помощью
jarsigner -verify -verbose my_application.apk
Использование инструментов сборки 24.0.3 и новее
В Android 7.0 представлена схема подписи APK v2, новая схема подписи приложений, которая обеспечивает более быстрое время установки приложения и дополнительную защиту от несанкционированного изменения файлов APK ( подробнее см. Здесь и здесь ). Поэтому Google реализовал собственный подписчик apk, который называетсяapksigner
(да!). Файл сценария можно найти в %ANDROID_HOME%/sdk/build-tools/24.0.3/
(.jar находится в /lib
подпапке). Используйте это так
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
и можно проверить с помощью
apksigner verify my-app.apk
Официальную документацию можно найти здесь.