我试图通过编辑androidmanifest.xml文件来改变我的默认/main/startup(不管你叫它什么)活动。我所做的只是改变了android:name属性。然而,这完全破坏了整个应用程序。当我试图安装它失败和读取。

安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES

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


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

每个Android .apk如果要安装在手机上,即使你没有通过市场安装,也需要签名。开发工具通过签署开发证书来解决这个问题,但.apk仍然是签名的。

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

因此,如果你对你的应用程序做了任何更改,你需要重新构建.apk,以便正确签名。


我发现这是由我的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}" />

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

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


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

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

java .

在当地。属性文件。它在项目目录(根目录)中。

Android不支持JDK 7(只有6或5),所以让ant脚本也使用JDK 6或5可能是一个很好的解决方案。


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


解决(为我)使用keytool的参数

-sigalg MD5withRSA -keyalg RSA -keysize 1024

在jarsigner中使用

-sigalg MD5withRSA -digestalg SHA1

解决方案

Android APK签名存在哪些隐患?


大多数时候,这个错误的解决方案非常简单:

卸载apk 清理Android项目 构建Android项目 安装/运行apk


在我的例子中,我可以构建并运行发布版本,但是在尝试进行调试构建时得到了INSTALL_PARSE_FAILED_NO_CERTIFICATES错误。

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

一个更好的长期解决方案是显式地创建一个调试。密钥存储库,而不是让ADT创建它。下面是这样做的命令:

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

当出现提示时,输入这些值:

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


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

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


我在Eclipse控制台中出现了这个错误。结果发现,我有两个内容相同但名称不同的罐子,它们相互冲突。我只是删除了其中一个,并设法在设备上安装了应用程序。


我得到这个错误是因为我释放了我的蚂蚁释放失败了,因为我耗尽了磁盘空间。


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


另一种得到这个错误的方法是在macOS上使用ant构建,并在应用程序的源树中有一个Finder图标文件(icon \r)。它似乎jarsigner不能处理文件名中的回车,尽管它会声称签名是有效的,如果你-验证APK,它总是导致APK不会安装在设备上。具有讽刺意味的是,谷歌驱动器查找器插件是Finder图标文件的一个很好的来源。

解决方案是在文件集中使用这样的说明符排除违规文件(这些文件在APK中是无用的):

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

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


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

在生成签名APK对话框中修正正确的签名版本


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


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


我有ionic / Visual Studio Code(在设备上运行Android)的问题:

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


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

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


你也可以检查

项目结构->默认配置->签名配置

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


今天它为我抛出这个错误,因为我有一个最小sdk为28的应用程序,我在一个sdk版本为23的模拟器上点击播放。通常这是不可能的(AS灰色的播放按钮),但今天不是那么多。


大多数答案都是正确的。另一个原因是

►你的min SDK比设备SDK小。 ►您的设备中有具有相同包名的旧应用程序


首先,试着这样做:

去Gradle脚本→build . Gradle (module:app)→然后你必须改变(minSdkVersion)的值。例如,如果您使用26,您可以尝试降低值,如(minSdkVersion 20) 那就试试(现在同步)。


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


最近我在升级到Android Studio 4.0时遇到了这个错误。原因是该项目在build.gradle中的签名配置中禁用了V2签名。

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

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

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


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

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

"INSTALL_PARSE_FAILED_NO_CERTIFICATES...APK signature verification failed." 

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


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

完整的错误

INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl1252907876.tmp/base.apk: Attempt to get length of null array .日志含义

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


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


您还可以将构建变体更改为Debug,这样应该就可以了


以我为例,我用MinimumSDK安装了一个比我实际设备的Android版本更大的项目。我用了另一个装置,它解决了。

我的项目MinSDK -> 24

我的手机安卓版本-> 21


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

项目结构->默认配置->签名配置


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

我开始了一个新的Kotlin项目,安装了一个新的Android Studio的工作任务。我试图构建默认模板模拟电话,并得到了给定的错误。

我做了以下事情:

安装最新版本的JRE和JDK 打开CMD并执行java -version以确保已安装。它返回一个有效的版本消息。 重新启动Android Studio并加载我的项目 点击播放按钮安装到我的模拟设备。 一切正常。


对于Xamarin用户来说,卸载并不能解决这个问题。问题在于,如果你将目标sdk升级到30+,你需要将密钥存储库文件重新加载到应用中心构建配置中。这将迫使应用中心与v2签署,这是从v30开始要求的。完全归功于这个github问题的评论


我在android studio的多设备运行新功能时遇到了这个问题。

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


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


导航到运行->编辑配置…—> Android App—> App—>安装选项

然后从应用程序包更改为APK而不是默认APK


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


发生这种错误的原因有很多。请在事件日志中查看更多详细信息。在我的情况下,我得到这个错误:

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中。

现在再次尝试安装。