Попытка вручную подписать пакет android с помощью jarsigner.exe и установить с помощью adb.exe

Я пытаюсь использовать jarsigner.exe и adb.exe, чтобы вручную подписать пакет android и установить его на эмулятор API V8. Я создал простой проект HelloAndroid, и он сгенерировал подписанный HelloAndroid.apk, используя debug.keystore, расположенную в каталоге .android пользователя. При запуске с Eclipse он создает и устанавливает apk на эмуляторе без проблем.

Я использовал инструменты Android для экспорта неподписанного пакета приложений в отдельный каталог. Я подписал и zipAligned пакет и использовал adb для его установки, но получил ошибку:

Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 

Я использовал следующую команду для ее подписания.

 jarsigner -verbose -keystore c:\users\jhwong\.android\debug.keystore -storepass android -keypass android -digestalg SHA-1 -sigalg SHA1withRSA -sigfile CERT -signedjar temp\HelloWorld2.apk temp\HelloWorld.unsigned.apk androiddebugkey adding: META-INF/MANIFEST.MF adding: META-INF/CERT.SF adding: META-INF/CERT.RSA signing: res/layout/main.xml signing: AndroidManifest.xml signing: resources.arsc signing: res/drawable-hdpi/icon.png signing: res/drawable-ldpi/icon.png signing: res/drawable-mdpi/icon.png signing: classes.dex 

Это не дало мне никаких ошибок и просто чтобы я убежал:

 jarsigner -verify -verbose temp\HelloWorld2.apk 

Он показал, что банк был проверен, и каждый файл подписан и часть манифеста.

Я запустил zipalign -v 4 temp\HelloWorld2.apk temp\HelloWorld3.apk который закончил без ошибок. Затем используется adb install -r temp\HelloWorld3.apk .

Я видел несколько связанных потоков и статей, предлагающих эти направления, но я озадачен тем, почему он не работает вручную, используя Eclipse для создания подписанного пакета. Я даже взял пакет, созданный из Eclipse, и смог использовать adb.exe для его установки, поэтому я сузил его до подписания пакета. Я пробовал хранилища ключей, которые я создал из keytool, но они не работали, поэтому я попробовал debug.keystore.

Я был бы признателен за любые советы, если они заметили что-то не так с моим кодом jarsigner.

Solutions Collecting From Web of "Попытка вручную подписать пакет android с помощью jarsigner.exe и установить с помощью adb.exe"

У нас была такая же проблема. Попробуйте использовать следующие значения параметров:

 jarsigner ... -digestalg SHA1 -sigalg MD5withRSA ... 

Кстати, использование явного sigalg и digestalg кажется обязательным с JDK 7.

Чтобы подписать apks с использованием JDK 1.7, нужно использовать эти ключевые слова "-sigalg MD5withRSA -digestalg SHA1 "

Причина: с JDK 7 алгоритм подписывания по умолчанию изменился, и вам нужно указать алгоритмы подписи и дайджеста (-sigalg и -digestalg), когда вы подписываете APK.

Команда:

 jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name 

Если вы используете JDK 7, попробуйте

jarsigner -sigalg SHA1withRSA -digestalg SHA1

Если вы

jarsigner error: java.security.SignatureException: private key algorithm is not compatible with signature algorithm

Затем попробуйте

jarsigner -sigalg MD5withRSA -digestalg SHA1