简体   繁体   English

来自adb install的INSTALL_PARSE_FAILED_NO_CERTIFICATES; 使用Java 6,Android 5.0.2

[英]INSTALL_PARSE_FAILED_NO_CERTIFICATES from adb install; using Java 6, Android 5.0.2

I've followed the instructions here and elsewhere on creating a signed jar file and I'm still getting INSTALL_PARSE_FAILED_NO_CERTIFICATES when I try to install the signed .apk onto my LG-D415. 我已经按照这里和其他地方的说明创建了一个签名的jar文件,当我尝试将签名的.apk安装到我的LG-D415上时,我仍然得到INSTALL_PARSE_FAILED_NO_CERTIFICATES。 As noted, the signing algorithm seems to work better with Java 6. So I uninstalled all versions of Java other than that and made sure keytool and jarsigner were using Java 6. 如上所述,签名算法似乎在Java 6中运行得更好。因此我卸载了除此之外的所有Java版本,并确保keytool和jarsigner使用Java 6。

keytool -genkey -v -keystore debug.keystore -alias TabletClient -keyalg RSA -keysize 2048 -validity 20000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore debug.keystore Release\TabletClient.apk TabletClient
zipalign -v 4 Release\TabletClient.apk Release\TabletClientZ.apk
adb install Release\TabletClientZ.apk

adb logcat shows: adb logcat显示:

W/PackageManager(  957): android.content.pm.PackageParser$PackageParserException: Failed to collect certificates from /data/app/vmdl272628750.tmp/base.apk
W/PackageManager(  957):        at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1108)
W/PackageManager(  957):        at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1035)
W/PackageManager(  957):        at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:11848)
W/PackageManager(  957):        at com.android.server.pm.PackageManagerService.access$2500(PackageManagerService.java:273)
W/PackageManager(  957):        at com.android.server.pm.PackageManagerService$7.run(PackageManagerService.java:9770)
W/PackageManager(  957):        at android.os.Handler.handleCallback(Handler.java:739)
W/PackageManager(  957):        at android.os.Handler.dispatchMessage(Handler.java:95)
W/PackageManager(  957):        at android.os.Looper.loop(Looper.java:135)
W/PackageManager(  957):        at android.os.HandlerThread.run(HandlerThread.java:61)
W/PackageManager(  957):        at com.android.server.ServiceThread.run(ServiceThread.java:46)
W/PackageManager(  957): Caused by: java.lang.SecurityException: Can not recognize a critical extension
W/PackageManager(  957):        at org.apache.harmony.security.utils.JarUtils.verifySignature(JarUtils.java:120)
W/PackageManager(  957):        at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:346)
W/PackageManager(  957):        at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:320)
W/PackageManager(  957):        at java.util.jar.StrictJarFile.<init>(StrictJarFile.java:68)
W/PackageManager(  957):        at android.content.pm.PackageParser.collectCertificates(PackageParser.java:1050)

Any ideas? 有任何想法吗? Any help will be appreciated. 任何帮助将不胜感激。

I found the answer. 我找到了答案。 The .apk was being signed as part of the build in adt, but with a key that didn't work. .apk是作为adt构建的一部分签署的,但是使用了一个不起作用的密钥。 For some reason the jarsigner step didn't completely replace the old signature, or show any error. 由于某种原因,jarsigner步骤没有完全替换旧签名,或显示任何错误。 So when the .apk was installed on the Android device it had a problem with the bad key. 因此,当Android设备上安装了.apk时,它会出现坏密钥问题。 The trick to finding this was to open the .apk file as a zip file before running jarsigner, and then delete the META-INF directory. 找到这个的技巧是在运行jarsigner之前将.apk文件作为zip文件打开,然后删除META-INF目录。 jarsigner then created it correctly, with the key Android creates in the .android directory. jarsigner然后使用Android在.android目录中创建的密钥正确创建它。 Once I realized this I was able to fix the problem by changing the adt command to use Android's key. 一旦我意识到这一点,我就可以通过更改adt命令来使用Android的密钥来解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 发布 INSTALL_PARSE_FAILED_NO_CERTIFICATES - Release INSTALL_PARSE_FAILED_NO_CERTIFICATES 在Eclipse中构建项目后INSTALL_PARSE_FAILED_NO_CERTIFICATES - INSTALL_PARSE_FAILED_NO_CERTIFICATES after building project in Eclipse Java严重更新后,在OS X Mountain Lion上安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES - Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES on OS X Mountain Lion after Java Critical Update Android Studio Wear Os 应用程序无法安装 INSTALL_PARSE_FAILED_NO_CERTIFICATES - Android Studio Wear Os application can't be installed INSTALL_PARSE_FAILED_NO_CERTIFICATES ADT v22调试密钥和INSTALL_PARSE_FAILED_NO_CERTIFICATES - ADT v22 Debug Key and INSTALL_PARSE_FAILED_NO_CERTIFICATES 即使使用jarsigner签名后,INSTALL_PARSE_FAILED_NO_CERTIFICATES也无法安装修改后的APK文件(无效的SHA1签名) - INSTALL_PARSE_FAILED_NO_CERTIFICATES failure installing modified apk file (invalid SHA1 signature), even after signing with jarsigner adb:无法安装 my_application-aligned.apk:失败 [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION:无法解析 AndroidManifest.xml] - adb: failed to install my_application-aligned.apk: Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed to parse AndroidManifest.xml] 从Java程序以编程方式安装Android应用(Runtime.getRunTime()。exec(adb.exe安装app_package_name) - Programmatically install Android app from java program (Runtime.getRunTime().exec(adb.exe install app_package_name) Android Studio声明[INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] - Android Studio states [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] 在Java中以编程方式执行adb install命令 - Programmatically executing adb install command in java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM