217

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

安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES

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

4

38 回答 38

209

我发现使用错误的签名配置时也会出现此错误。如此处所述,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 签名。

于 2017-03-29T15:34:40.567 回答
71

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

.apk如果要安装在手机上,每个 Android 都需要签名,即使您不是通过 Market 安装。开发工具通过使用开发证书签名来解决这个问题,但.apk仍然是签名的。

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

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

于 2010-05-26T16:13:28.923 回答
54

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

我在使用“ant”时遇到了这个问题,这是由于文档中提到的这个 CAUTION:

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 并对其进行了压缩,但它给出了一个稍微不同的错误:

$ "$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}" />
于 2012-04-10T04:58:38.267 回答
34

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

  1. 卸载你的apk
  2. 清理你的 Android 项目
  3. 构建您的 Android 项目
  4. 安装/运行你的apk
于 2013-04-10T11:56:09.310 回答
18

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

-sigalg MD5withRSA -keyalg RSA -keysize 1024

并在 jarsigner 中使用

-sigalg MD5withRSA -digestalg SHA1

中找到的解决方案

Android APK 签名存在哪些陷阱?

于 2012-08-20T23:07:10.540 回答
14

如果您添加签名配置(创建签名密钥并添加到“项目结构”>“模块”>“签名配置”)但忘记在“项目结构”>“构建变体”>“构建类型”>“签名配置”。

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

"INSTALL_PARSE_FAILED_NO_CERTIFICATES...APK signature verification failed." 

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

签名配置示例

于 2020-10-02T10:52:47.650 回答
11

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

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

于 2019-05-22T09:40:51.507 回答
10

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

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

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
于 2020-06-02T16:57:35.903 回答
8

就我而言,我可以构建和运行发布版本,但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

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

  • 名字和姓氏:Android Debug
  • 组织单位:安卓
  • 组织名称:未知
  • 城市或地区:未知
  • 州或省:未知
  • 国家代码:美国
于 2013-05-29T23:15:43.940 回答
7

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

我的项目 MinSDK -> 24

我的手机安卓版 -> 21

于 2021-02-08T12:54:28.980 回答
6

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

于 2018-12-18T13:17:06.373 回答
5

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

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

java.library.path

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

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

于 2012-05-11T10:44:18.260 回答
5

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

在 Generate Signed APK 对话框下修复勾选正确的签名版本

于 2017-03-31T15:46:15.583 回答
5

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

► 你的 min sdk 小于 device sdk。
► 您的设备中有较旧的应用程序具有相同的包名称

于 2020-02-11T11:03:40.127 回答
3

你也可以检查

Project Structure-> Default Config->Signing Config

在你添加所有你需要的东西之后

于 2019-11-19T13:53:45.913 回答
2

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

  • 如果它是纯 Java,请确保不要将其包含在 .jar 导出中
  • 如果它不是纯 Java(意味着它是一个 Android 项目),那么您必须将它作为库项目包含在内
于 2013-11-02T19:26:08.783 回答
1

将环境变量设置JAVA_HOME为 JDK 5 或 6(而不是 JDK 7)修复了该错误。

于 2012-06-04T09:16:24.033 回答
1

导航到运行 -> 编辑配置... -> Android 应用程序 -> 应用程序 -> 安装选项

然后改为APK from app bundle代替Default APK 在此处输入图像描述

于 2021-11-04T20:51:56.693 回答
1

对我来说,我忘记将新的签名配置添加到

Project Structure-> Default Config->Signing Config

于 2021-03-16T21:10:01.187 回答
1

我收到此错误是因为我确实释放了我ant release的失败,因为我的磁盘空间不足。

于 2016-06-17T05:07:08.817 回答
1

今天它给我抛出了这个错误,因为我有一个最小 sdk 为 28 的应用程序,并且正在一个 SDK 版本为 23 的模拟器上播放。通常这是不可能的(因为灰色的播放按钮),但今天不是这样很多。

于 2020-01-28T17:16:36.093 回答
0

经过一段时间和多个关于该主题的在线线程后,我设法修复了我的项目。

它主要考虑您放入的最后一个文件(可能是图像或布局)。如果您删除它们,它会起作用,您可以再次构建您的项目。

于 2012-05-03T18:28:30.687 回答
0

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

于 2014-08-22T13:38:32.987 回答
0

当我尝试在运行 api v23 的手机上安装针对 Android N 预览构建的 Xamarin 项目时出现此错误。解决方案是不要那样做。

于 2016-06-27T18:25:52.850 回答
0

打开终端,写Clean project->回车->这个问题会在几秒钟内自动解决。

于 2021-02-06T01:29:16.390 回答
0

对我来说简单但愚蠢的解决方法是安装 JRE 和 JDK。

我使用全新安装的 Android Studio 开始了一个新的 Kotlin 项目,以完成工作任务。我尝试将默认模板构建到模拟手机并得到给定的错误。

我做了以下事情:

  • 安装了最新的 JRE 和 JDK 版本
  • 打开 CMD 并java -version确保它已安装。它返回一个有效的版本消息。
  • 重新启动 Android Studio 并加载我的项目
  • 单击Play按钮安装到我的模拟设备。
  • 一切正常。
于 2021-03-24T11:56:29.967 回答
0

我在使用 ionic / Visual Studio Code(在设备上运行 Android)时遇到了这个问题:

我卸载了移动设备上的应用程序(设置/应用程序),错误消失了,应用程序正在启动。

于 2019-03-12T08:29:16.063 回答
0

我在JetBrains Rider IDE中遇到了这个问题。

完全错误

INSTALL_PARSE_FAILED_NO_CERTIFICATES:无法从 /data/app/vmdl1252907876.tmp/base.apk 收集证书:尝试获取空数组的长度

问题是使用JDK8的结果。切换到 JDK11 解决了这个问题。

在此处输入图像描述

于 2020-10-08T14:41:37.470 回答
0

如果您安装的是未签名版本的 APK,则会出现此问题。检查您是否安装了正确的 APK。

于 2019-01-30T05:11:05.790 回答
0

如果您使用 Azure 构建管道,并且您使用 Android 签名任务来签署您的 APK,请确保使用版本 3+ 来签署您的应用程序。这将启用 Android 11+ 所需的 v2 方案 Android 签名。

于 2021-09-02T11:39:26.380 回答
0

首先尝试这样做:

  • 转到 Gradle 脚本 → bulid.gradle(module:app) → 然后您必须更改 (minSdkVersion) 值。例如,如果您使用 26,您可以尝试减小该值,例如 (minSdkVersion 20 )
  • 然后尝试(立即同步)。
于 2020-03-21T14:20:41.827 回答
0

确保构建变体在 Android Studio 中设置为调试(而不是发布)(检查构建变体面板)。

于 2020-08-29T11:40:18.677 回答
0

这个问题发生在我的run on multiple devicesandroid studio 上的新功能上。

我有 3 个 api 级别为 22 、 27 和 30 的模拟器。我在多次运行选项中遇到了这个错误,但是当我在每台设备上分别安装我的应用程序时并没有发生这种情况。

于 2021-08-22T20:11:25.443 回答
0

如果您使用的是模拟器,请尝试重置它,如果您在移动设备上先卸载应用程序,然后关闭开发人员模式,然后将其打开,问题将得到解决。

于 2020-04-22T01:59:30.897 回答
0

也许,您已将构建变体从调试更改为发布。发布变体需要特殊证书。您可以在菜单 build->select build variant... 下更改构建变体。

于 2022-01-10T23:42:38.093 回答
0

对于在应用中心构建和分发的 Xamarin 用户,卸载可能无法解决此问题。问题可能是如果您将目标 sdk 升级到 30+,您需要将密钥库文件重新上传到应用中心构建配置。这将强制应用中心使用 v2 签名,这是从 v30 开始的要求。完全归功于此 github 问题评论

于 2021-07-27T14:30:33.040 回答
0

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

解决方案是使用以下说明符排除有问题的文件(无论如何在 APK 中无用)fileset

    <exclude name="**/Icon&#13;" />
于 2017-03-07T05:30:38.007 回答
-1

You can also just change the build variant to Debug and you should be good to go在此处输入图像描述

于 2021-02-07T06:01:58.883 回答