java - 来自 adb install 的 INSTALL_PARSE_FAILED_NO_CERTIFICATES;使用Java 6、Android 5.0.2

标签 java android installation adb sign

我已按照此处和其他地方的说明创建签名的 jar 文件,但当我尝试将签名的 .apk 安装到 LG-D415 上时,仍然收到 INSTALL_PARSE_FAILED_NO_CERTIFICATES。 如前所述,签名算法似乎在 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 显示:

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)

有什么想法吗?任何帮助将不胜感激。

最佳答案

我找到了答案。 .apk 已作为 adt 中构建的一部分进行签名,但使用的 key 不起作用。由于某种原因, jarsigner 步骤没有完全替换旧签名,或显示任何错误。因此,当在 Android 设备上安装 .apk 时,会出现 key 错误的问题。 找到这个问题的技巧是在运行 jarsigner 之前将 .apk 文件作为 zip 文件打开,然后删除 META-INF 目录。然后 jarsigner 使用 Android 在 .android 目录中创建的 key 正确创建了它。 一旦我意识到这一点,我就可以通过更改 adt 命令以使用 Android 的 key 来解决该问题。

关于java - 来自 adb install 的 INSTALL_PARSE_FAILED_NO_CERTIFICATES;使用Java 6、Android 5.0.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035139/

相关文章:

java - 如何在特定日期设置时区?

java - 我应该在Java中移位以除以2吗?

android - 将项目导入工作区时遇到问题

android - FragmentTransation setCustomAnimations 不起作用

python:用户站点中的包不会覆盖 ubuntu 上的 dist-packages

java - 从 ListView 中删除元素(滑动或单击)

java - okhttp - 拦截器 - 阻止非致命异常记录到 Crashlytics

java - 在没有 setEnabled(false) 的情况下禁用按钮单击动画

windows - 为什么 Visual Studio 安装在多个驱动器上?

installation - 如何使用 installshield 2011 获取 msi 文件而不是 exe 文件