我试图通过编辑androidmanifest.xml文件来改变我的默认/main/startup(不管你叫它什么)活动。我所做的只是改变了android:name属性。然而,这完全破坏了整个应用程序。当我试图安装它失败和读取。
安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES
当我试图把它改变回以前的状态时,它仍然给我同样的错误…我做了什么?
我试图通过编辑androidmanifest.xml文件来改变我的默认/main/startup(不管你叫它什么)活动。我所做的只是改变了android:name属性。然而,这完全破坏了整个应用程序。当我试图安装它失败和读取。
安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES
当我试图把它改变回以前的状态时,它仍然给我同样的错误…我做了什么?
当前回答
我发现当使用错误的签名配置时也会出现这个错误。如上所述,Android 7.0引入了一个新的签名方案V2。V2方案签署整个APK,而不仅仅是JAR,就像在V1方案中所做的那样。如果您只使用V2签名,并试图安装在7.0之前的目标上,您将得到这个错误,因为jar本身没有签名,7.0之前的PackageManager无法检测到V2 APK签名的存在。
为了与所有目标系统兼容,请在Android Studio的Generate signed APK对话框中检查两个签名版本框,以确保APK与这两个方案都有签名,如下所示:
如果预期只有7.0目标,则不需要包括V1签名。
其他回答
我发现这是由我的JDK版本引起的。
我在使用“ant”时遇到了这个问题,这是由于文档中提到的注意事项:
http://developer.android.com/guide/publishing/app-signing.html#signapp 注意:从JDK 7开始,默认的签名算法已经发生了变化,在对APK签名时需要指定签名和摘要算法(-sigalg和-digestalg)。
我有JDK 7。在我的Ant日志中,我使用-v表示详细信息,它显示出来了
$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
[exec] pkg: /data/local/tmp/PairFinder-release.apk
[exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
我手动对JAR进行了签名并对其进行了zip对齐,但它给出了一个略有不同的错误:
$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)
我在这里找到了答案。
如何处理INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES不卸载
我只需要卸载它,然后它就工作了!
$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)
现在我只需要修改build.xml在签名时使用这些选项!
好的,在这里:C:\Program Files\Java\ android-sdk\tools\ant\build.xml
<signjar
sigalg="MD5withRSA"
digestalg="SHA1"
jar="${out.packaged.file}"
signedjar="${out.unaligned.file}"
keystore="${key.store}"
storepass="${key.store.password}"
alias="${key.alias}"
keypass="${key.alias.password}"
verbose="${verbose}" />
发生这种错误的原因有很多。请在事件日志中查看更多详细信息。在我的情况下,我得到这个错误:
Failed to commit install session 1278974094 with command cmd package install-commit 1278974094. Error: INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed collecting certificates for /data/app/vmdl1278974094.tmp/0_app-debug: Failed to collect certificates from /data/app/vmdl1278974094.tmp/0_app-debug: Attempt to get length of null array
这可能很愚蠢,但我几个月都找不到答案,而且这种情况只发生在我公司的项目中。如果我创建一个全新的项目,它安装得非常好。
如果你用的是Windows,你安装Java了吗?检查是否有C:\Program Files\Java\ jdk1.8.0_your_version文件夹。
如果没有,请从Oracle官方网站下载JDK。并将值为“C:\Program Files\Java\jdk1.8.0_your_version”的变量JAVA_HOME添加到环境变量中,然后将JAVA_HOME也添加到PATH中。
现在再次尝试安装。
我在Eclipse控制台中出现了这个错误。结果发现,我有两个内容相同但名称不同的罐子,它们相互冲突。我只是删除了其中一个,并设法在设备上安装了应用程序。
导航到运行->编辑配置…—> Android App—> App—>安装选项
然后从应用程序包更改为APK而不是默认APK
解决(为我)使用keytool的参数
-sigalg MD5withRSA -keyalg RSA -keysize 1024
在jarsigner中使用
-sigalg MD5withRSA -digestalg SHA1
解决方案
Android APK签名存在哪些隐患?