什么是INSTALL_PARSE_FAILED_NO_CERTIFICATES错误?

mtm*_*ock 138 installation android apk android-install-apk

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

安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES

当我试图将它改回以前的状态时,它仍然给我同样的错误......我做了什么?

Pau*_*zzi 165

我发现使用错误的签名配置时现在也会发生此错误.如上所述这里的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签名.

  • 你节省了我很多时间。升级Android Studio引起了噩梦。这就是其中之一。我想知道SO是否不会死于Android开发的一半以上。Android Studio没有提供有关错误的任何线索。 (3认同)
  • 来过这里两次,但我不能两次投票. (3认同)
  • 幸运的是,我先在旧设备上测试了发行版APK,然后才在Google Play上发布了该版本。如果所有<Android 7.0设备都无法安装新版本,那将是一场灾难。单击创建apk版本时,带有两个版本的东西应该是“大红色弹出窗口”对话框! (2认同)

Chl*_*loe 52

我发现这是由我的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]
Run Code Online (Sandbox Code Playgroud)

我手动签署了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)
Run Code Online (Sandbox Code Playgroud)

我发现这里回答了.

如何在不卸载的情况下处理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)
Run Code Online (Sandbox Code Playgroud)

现在我只需要在签名时修改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}" />
Run Code Online (Sandbox Code Playgroud)

  • JDK 7也是我的问题.我很懒,卸载了JDK 7并安装了JDK 6,也工作了^^.其他hack解决方案但更少激进可以让两者都安装但是将JAVA_HOME设置为JDK 6并将JDK 6的bin路径放在PATH中. (3认同)

Dav*_*ebb 50

AndroidManifest.xml直接在.apk文件中编辑了吗?如果是这样,那将无效.

.apk即使您没有通过电子市场安装,如果要安装在手机上,每个Android都需要签名.开发工具通过使用开发证书进行签名来解决此问题,但.apk仍然已签名.

这样做的一个用途是设备可以判断.apk某个安装的应用程序是否有效升级,因为如果它是相同的证书.

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

  • 只需在Eclipse中编辑清单并单击"保存" (5认同)
  • 对于那些在颤振中苦苦挣扎的人,请运行“flutter clean”并再次运行/调试!此操作与上面的解决方案类似,因为它会清理构建文件夹并在运行/调试时再次重建构建文件! (2认同)

Jan*_*Cor 22

大多数情况下,此错误的解决方案非常简单:

  1. 卸载你的apk
  2. 清理您的Android项目
  3. 构建您的Android项目
  4. 安装/运行你的apk


Ale*_*der 17

解决(对我来说)在keytool中使用args

-sigalg MD5withRSA -keyalg RSA -keysize 1024
Run Code Online (Sandbox Code Playgroud)

并在jarsigner中使用

-sigalg MD5withRSA -digestalg SHA1
Run Code Online (Sandbox Code Playgroud)

找到的解决方案

Android APK签名存在什么样的陷阱?


Raj*_*jan 11

我也面临同样的问题。首先,我使用 V2 生成构建并将其安装在运行 OS 5.1 的移动设备中,但我遇到了同样的问题。但是构建在 OS 7.0 上运行的平板电脑上运行良好。所以我用 V1 Jar 签名生成了构建,它在两个设备上都运行良好。

结论:如果您支持 android OS 7.0 以下的设备。使用 V1 jar 签名生成构建。


edd*_*dym 11

如果您添加签名配置(创建签名密钥并添加到“项目结构”>“模块”>“签名配置”)但忘记在“项目结构”>“构建变体”>“中指出,则可能会引发此错误构建类型”>“签名配置”。

签名配置字段不应为空!(见下图)否则,你会看到

"INSTALL_PARSE_FAILED_NO_CERTIFICATES...APK signature verification failed." 
Run Code Online (Sandbox Code Playgroud)

如果您尝试安装release变体,则会出错。(或具有相同配置错误的另一个变体)

签名配置示例


mik*_*ehc 9

最近我在升级到 Android Studio 4.0 时遇到了这个错误。原因是该项目在build.gradle.

解决方案是将其删除v2SigningEnabled false或显式设置为true,这是默认值。

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
Run Code Online (Sandbox Code Playgroud)


Emr*_*lan 7

大多数答案都是正确的。发生的其他一些原因是

\n\n
\n

\xe2\x96\xba 你的最小 sdk 小于设备 sdk。
\n \xe2\x96\xba 您的设备中有具有相同软件包名称的旧应用程序

\n
\n


Kri*_*son 6

在我的情况下,我可以构建和运行发布版本,但INSTALL_PARSE_FAILED_NO_CERTIFICATES在尝试进行调试构建时遇到错误.

解决方案是删除我的debug.keystore文件,让ADT重新创建它.它显然已经过期了.

一个更好的长期解决方案是明确创建一个debug.keystore仅在一年后不会过期的解决方案,而不是让ADT创建它.这是执行此操作的命令:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000
Run Code Online (Sandbox Code Playgroud)

出现提示时,输入以下值:

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


Ixx*_*Ixx 5

这是一个丑陋但快速的解决方案:使用JDK 6而不是7.

阅读Chloe的回答后,我卸载了我的JDK 7(目前不需要它)并安装了JDK 6.修复了它.一个更好的解决方案是让ant使用JDK 6(不卸载7).也许可以更改/设置此属性:

的java.library.path

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

Android无论如何都不能与JDK 7一起使用(只有6或5),因此使ant脚本也使用JDK 6或5可能是一个很好的解决方案.


Pan*_*mar 5

这是因为之前生成的版本和当前生成的版本在 v1(jar 签名)和 v2(完整 APK 签名)之间存在签名版本冲突,

要修复,请在“生成签名的 APK”对话框中勾选正确的签名版本


Row*_*ezi 5

在较新的 Android Studio 3.2+ 版本中,如果您尝试运行release安装,并且您尚未定义任何签名配置,则会显示错误提示并且安装将失败。您需要做的是正确运行debug构建或设置签名配置(V1 或 V2)。


ima*_*yni 5

就我而言,我正在安装一个项目,MinimumSDK 比我的真实设备的 Android 版本大。我用了另一个设备,它解决了。

我的项目 MinSDK -> 24

我的手机安卓版 -> 21


归档时间:

查看次数:

200898 次

最近记录:

5 年,11 月 前