Попытка вручную подписать пакет Android с jarsigner.exe и установить с помощью adb.exe - PullRequest
19 голосов
/ 31 марта 2011

Я пытался использовать 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 для его установки, поэтому я сузил его до подписания пакета.Я пробовал хранилища ключей, сгенерированные мной из хранилища ключей, но они также не работали, поэтому я попробовал debug.keystore.

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

Ответы [ 3 ]

37 голосов
/ 11 августа 2011

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

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

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

7 голосов
/ 14 марта 2013

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

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

Команда:

jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile]
[originalapk] alias_name
0 голосов
/ 20 декабря 2014

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

...