我一直在尝试使用 jarsigner.exe 和 adb.exe 手动签署 android 包并将其安装在 API V8 模拟器上。我创建了一个简单的 HelloAndroid 项目,它会使用位于用户 .android 目录中的 debug.keystore 生成签名的 HelloAndroid.apk。从 Eclipse 启动时,它会毫无问题地在模拟器上构建和安装 apk。
我使用 android 工具将未签名的应用程序包导出到单独的目录。我对包进行了签名和压缩对齐,并使用 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
它显示 jar 已经过验证,每个文件都已签名,并且是 list 的一部分。
我运行了 zipalign -v 4 temp\HelloWorld2.apk temp\HelloWorld3.apk
,它没有错误地完成。
然后使用 adb install -r temp\HelloWorld3.apk
。
我已经看到几个相关的线程和文章建议这些方向,但我很困惑为什么它不能手动工作而不是使用 Eclipse 来构建签名包。我什至采用了从 Eclipse 构建的包,并且能够使用 adb.exe 来安装它,所以我将其范围缩小到对包进行签名。我已经尝试过从 keytool 生成的 keystore ,但它们不能正常工作,这就是我尝试 debug.keystore 的原因。
如果他们发现我的 jarsigner 代码有任何问题,我将不胜感激。
最佳答案
我们遇到了同样的问题。尝试使用以下参数值:
jarsigner ... -digestalg SHA1 -sigalg MD5withRSA ...
顺便说一句,JDK 7 似乎强制使用显式 sigalg 和 digestalg。
关于android - 尝试使用 jarsigner.exe 手动签署 android 包并使用 adb.exe 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505240/