什么是INSTALL_PARSE_FAILED_NO_CERTIFICATES错误?

我试图通过编辑androidmanifest.xml文件来改变我的默认/主/启动(不pipe你怎么称呼它)活动。 我所做的只是更改android:name属性。 不过,这完全打破了整个应用程序。 当我尝试安装它失败并读取

安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES

当我试图改变它回到以前的状态,它仍然给我同样的错误…我做了什么!?!?!

你是否直接在.apk文件中编辑AndroidManifest.xml ? 如果是这样,那就行不通了。

每一个.apk需要签名,如果它将被安装在手机上 ,即使你没有通过市场进行安装。 开发工具通过签署一个开发证书来工作,但是.apk仍然是签名的。

这样做的一个用途是设备可以告诉一个.apk是否是已安装应用程序的有效升级,因为如果是,证书将是相同的。

因此,如果您对应用程序进行了任何更改,则需要重新生成.apk以便正确地进行签名。

我发现现在使用错误的签名configuration时也会发生这个错误。 如此处所述,Android 7.0引入了新的签名schemeV2 。 V2scheme对整个APK进行签名,而不仅仅是JAR,就像在V1scheme中所做的那样。 如果您仅使用V2进行签名,并尝试安装在7.0之前的目标上,则会出现此错误,因为JAR本身没有签名,并且7.0之前的PackageManager无法检测到V2 APK签名的存在。

要与所有目标系统兼容,请确保APK已同时在两个scheme中签名,方法是在Android Studio的“ 生成签名的APK”对话框中同时选中两个签名版本框,如下所示:

在这里输入图像描述

如果预计只有7.0个目标,则不需要包含V1签名。

我发现这是由我的JDK版本引起的。

我遇到了“ant”这个问题,这是由于在文档中提到的这个小心:

http://developer.android.com/guide/publishing/app-signing.html#signapp

警告:从JDK 7开始,缺省签名algorithm已经发生变化,要求您在签名APK时指定签名和摘要algorithm(-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并进行了zipaligned,但它给出了一个稍微不同的错误:

 $ "$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) 

我在这里find答案。

如何在不卸载的情况下处理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}" /> 

解决了(对我来说)在keytool中使用的参数

 -sigalg MD5withRSA -keyalg RSA -keysize 1024 

并在jarsigner中使用

 -sigalg MD5withRSA -digestalg SHA1 

解决scheme中find

Android APK签名有什么样的秘密?

大多数情况下,这个错误的解决scheme非常简单:

  1. 卸载你的apk。
  2. 清理你的Android项目。
  3. build立你的android项目。
  4. 安装/运行你的apk

玩的开心

这是一个丑陋而快速的解决scheme:使用JDK 6而不是7。

在阅读了Chloe的回答之后,我卸载了我的JDK 7(目前不需要它)并安装了JDK 6.修复了这个问题。 一个更好的解决scheme将使ant使用JDK 6(不卸载7)。 也许可以改变/设置这个属性:

的java.library.path

在local.properties文件中。 它在项目目录(root)中。

Android无法使用JDK 7(只有6或5),所以使ant脚本也使用JDK 6或5可能是一个很好的解决scheme。

在我的情况下,我可以构build和运行发布版本,但在尝试执行debugging版本时遇到了INSTALL_PARSE_FAILED_NO_CERTIFICATES错误。

解决scheme是删除我的debug.keystore文件,让ADT重新创build它。 它显然过期了。

一个更好的长期解决scheme是明确创build一个不会在一年后过期的debug.keystore ,而不是让ADT创build它。 以下是执行该操作的命令:

 keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000 

出现提示时,input这些值:

  • 名字和姓氏: Androiddebugging
  • 组织单位: Android
  • 组织名称: 未知
  • 城市或地点: 未知
  • 州或省: 未知
  • 国家代码: US

将环境variablesJAVA_HOME为JDK 5或6(而不是JDK 7)修复了错误。

如果您尝试包含一个包含AndroidManifest.xml文件的.jar库,就会发生这种情况。

  • 如果是纯Java,请确保不要将其包含在.jar导出中
  • 如果它不是纯Java(这意味着它是一个Android项目),那么你必须把它作为一个库项目

经过一段时间和多个在线主题我设法修复我的项目。

主要是考虑到你放入的最后一个文件( 可能是图像或布局 )。如果删除它们,它就会生效,你可以重新构build你的项目。

我在Eclipse控制台中遇到了这个错误。 事实certificate,我有两个内容相同但名称不同的jar子,彼此冲突。 我刚刚删除了其中一个,并设法在设备上安装应用程序。

我得到这个错误,因为我释放了我的ant release失败,因为我用完了磁盘空间。

当我试图在运行api v23的手机上安装一个针对Android N预览而构build的Xamarin项目时,我得到了这个错误。 解决方法是不这样做。

另一个得到这个错误的方法是在macOS上使用ant来构build,并在应用程序的源代码树中有一个Finder图标文件( Icon\r )。 它似乎jarsigner无法应付回车的文件名,并且,虽然它会声称签名是有效的,如果你-verify APK,它总是导致一个APK不会安装在设备上。 具有讽刺意味的是,Google Drive Finder插件是Finder图标文件的重要来源。

解决scheme是在文件集中使用类似这样的说明符排除违规文件(在APK中无用)

  <exclude name="**/Icon&#13;" /> 

因为之前生成的版本和当前在v1(jar签名)和v2(full APK签名)之间的签名版本中有冲突,

在“生成签名APK”对话框中修复滴答适当的签名版本