Подтвердить что ты не робот

Попытка вручную подписать пакет 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.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Команда:

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

Ответ 3

Если вы используете 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