Как мне убедиться, что Android apk подписан с сертификатом релиза?


222

Как я могу проверить, что Android apk подписан релизом, а не отладочным сертификатом?


6
Я написал скрипт , который проверит apk по хранилищу ключей.
JohnnyLambada

примите ответ, если у вас есть ваш.
Ринкал Бхандери

@JohnnyLambada Как я могу запустить ваш скрипт в Mac?
Аарон Ажари

1
@JohnnyLambada Как я могу запустить ваш скрипт?
Сунил

@sunil Это скрипт bash, который создает новую функцию bash. перейдите по ссылке и вставьте ее в файл source thatfile. Комментарии в скрипте объясняют, как его запустить.
JohnnyLambada

Ответы:


372

Используйте эту команду (перейдите в java <jdk <bin path в командной строке cmd)

$ jarsigner -verify -verbose -certs my_application.apk

Если вы видите «CN = Android Debug», это означает, что .apk был подписан с помощью ключа отладки, сгенерированного Android SDK (означает, что он не подписан), в противном случае вы найдете что-то для CN. Для получения дополнительной информации см .: http://developer.android.com/guide/publishing/app-signing.html


1
Я получил сообщение как jar, проверенный в конце выполнения команды для 2 diff apk files.so, запутался. но так как он дает CN = "android debug" для 1 apk и отличается для других apk .got, чтобы узнать, какой 1 подписан. Спасибо.
iRunner

3
Как это проверить подпись? Будет ли он использовать доверенные ЦС системы? Или это только инструмент для проверки целостности файлов jar? Спасибо
Мостафа Шахверды

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- это не значит, что оно не подписано. Это означает, что вы только что написали - это подписано ключом отладки.
Дмитрий Зайцев

3
Как мы можем проверить, что он был подписан тем же самым файлом сертификата, а не тем, который имеет одинаковые значения для организации, местоположения и т. Д.?
OlivierM

1
Спасибо. Так что jarsigner -verify -verbose -certs myapp.apk | grep CN= | lessи мы не должны видеть «CN = Android Debug».
rpattabi

70

Используйте консольную команду:

apksigner verify --print-certs application-development-release.apk

Вы можете найти apksigner в ../sdk/build-tools/24.0.3/apksigner.bat. Только для инструментов сборки v. 24.0.3 и выше.

Также ознакомьтесь с документами Google: https://developer.android.com/studio/command-line/apksigner.html.


Я нашел apksignerв `% LOCALAPPDATA% \ Android \ sdk \ build-tools \ 25.0.3` (и во всех других версиях инструментов сборки, которые я установил)
Джон

2
Обратите внимание, что apksignerотсутствует в версии 26.0.0build-tools. Он отслеживается в issetracker.google.com/issues/62696222 и должен быть исправлен в следующей версии. Чтобы обойти эту проблему до тех пор, чтобы использовать apksignerс 25.0.3.
Friederbluemle

2
Обновление: apksignerвключено в версию26.0.1
форрестхопкинса

Обновление: APKSigner также есть в 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Я полагаю, вы найдете его во всех будущих выпусках :)
Кирилл Вашило

2
для подробного вывода используйте -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

Используйте эту команду: (Jarsigner находится в вашей папке Java bin, перейдите в java-> jdk-> bin путь в командной строке cmd)

$ jarsigner -verify my_signed.apk

Если .apk подписан должным образом, Jarsigner печатает «jar Verified»


13
Это не достаточно хорошо, так как и отладочный, и релизный apks подписаны будут давать "jar Verified". Проверьте детали ответа @ Anass.
rpattabi

Я попробовал именно эту команду, и она подтвердилась. Затем в качестве эксперимента я зашел в APK и удалил буквально все файлы, кроме файлов sig и манифеста, и он все еще проверен. Так что здесь что-то не так. Однако мне еще предстоит попробовать ответ @ Anass.
orblivion

39

Самый простой из всех:

keytool -list -printcert -jarfile file.apk

При этом используется встроенное в Java приложение keytool и не требуется извлечение или установка инструментов сборки.


Для тех, кто не может запустить keytoolсразу, проверьте это и, возможно, попробуйте добавить %JAVA_HOME%\binк пути
TT--

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.