Ответ 1
У нас была такая же проблема. Попробуйте использовать следующие значения параметров:
jarsigner ... -digestalg SHA1 -sigalg MD5withRSA ...
Кстати, использование явного sigalg и digestalg кажется обязательным с JDK 7.
Я пытаюсь использовать 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.
У нас была такая же проблема. Попробуйте использовать следующие значения параметров:
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