
[英]INSTALL_PARSE_FAILED_NO_CERTIFICATES error in Eclipse
[英]What is INSTALL_PARSE_FAILED_NO_CERTIFICATES error?
我试图通过编辑androidmanifest.xml
文件来更改我的默认/主要/启动(无论你怎么称呼它)活动。 我所做的只是更改android:name
属性。 但是,这完全破坏了整个应用程序。 当我尝试安装时失败并读取。
安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES
当我试图将它改回之前的 state 时,它仍然给我同样的错误……我做了什么?
我发现现在使用错误的签名配置时也会发生此错误。 如上所述这里的Android 7.0引入了一个新的签名方案,V2。 V2 方案对整个 APK 进行签名,而不仅仅是对 JAR 进行签名,就像在 V1 方案中所做的那样。 如果您只使用 V2 签名,并尝试在 7.0 之前的目标上安装,您将收到此错误,因为 JAR 本身没有签名,并且 7.0 之前的PackageManager无法检测到 V2 APK 签名的存在。
为了与所有目标系统兼容,请通过检查 Android Studio 的生成签名 APK对话框中的两个签名版本框来确保 APK 使用两种方案进行签名,如下所示:
如果仅预期 7.0 目标,则无需包含 V1 签名。
您是否直接在.apk
文件中编辑了AndroidManifest.xml
? 如果是这样,那将不起作用。
如果要安装在手机上, 每个 Android .apk
需要签名,即使您不是通过 Market 安装。 开发工具通过使用开发证书签名来解决这个问题,但.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 并将其压缩对齐,但它给出了一个稍微不同的错误:
$ "$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}" />
大多数情况下,此错误的解决方案非常简单:
解决了(对我而言)在 keytool 中使用 args
-sigalg MD5withRSA -keyalg RSA -keysize 1024
并在 jarsigner 中使用
-sigalg MD5withRSA -digestalg SHA1
解决方案在
我也面临同样的问题。 首先,我使用 V2 生成构建并将其安装在运行 OS 5.1 的移动设备中,但我遇到了同样的问题。 但是构建在 OS 7.0 上运行的平板电脑上运行良好。 所以我用 V1 Jar 签名生成了构建,它在两个设备上都运行良好。
结论:如果您支持 android OS 7.0 以下的设备。 使用 V1 jar 签名生成构建。
最近我在升级到 Android Studio 4.0 时遇到了这个错误。 原因是该项目在build.gradle
的签名配置中禁用了 V2 签名。
解决方案是删除v2SigningEnabled false
或将其显式设置为true
,这是默认值。
android {
signingConfigs {
dev {
v2SigningEnabled true
}
}
}
就我而言,我可以构建和运行发布版本,但是在尝试进行调试版本时遇到了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
出现提示时,输入以下值:
这是一个丑陋但快速的解决方案:使用 JDK 6 而不是 7。
阅读克洛伊的回答后,我卸载了我的 JDK 7(目前不需要它)并安装了 JDK 6。这修复了它。 更好的解决方案是让 ant 使用 JDK 6(无需卸载 7)。 也许可以更改/设置此属性:
java.library.path
在 local.properties 文件中。 它位于项目目录(根)中。
Android 无论如何都不能使用 JDK 7(只有 6 或 5),因此使 ant 脚本也使用 JDK 6 或 5 可能是一个很好的解决方案。
这是因为之前生成的构建版本和当前版本在 v1(jar 签名)和 v2(完整 APK 签名)之间的签名版本存在冲突,
在生成签名的 APK 对话框下修复勾选正确的签名版本
在较新的 Android Studio 3.2+ 版本中,如果您尝试运行release
install,并且您尚未定义任何签名配置,则会显示错误提示并且安装将失败。 您需要做的是运行debug
版本或正确设置签名配置(V1 或 V2)。
就我而言,我正在安装一个项目,MinimumSDK 比我的真实设备的 Android 版本大。 我用了另一个设备,它解决了。
我的项目 MinSDK -> 24
我的手机安卓版 -> 21
大多数答案是正确的。 发生的其他一些原因是
► 您的最小 sdk 小于设备 sdk。
► 您的设备中有相同包名的旧应用程序
你也可以检查
Project Structure
-> Default Config
-> Signing Config
在你添加所有你需要的之后
如果您尝试包含包含AndroidManifest.xml
文件的.jar
库,则可能会发生这种情况。
将环境变量JAVA_HOME
为 JDK 5 或 6(而不是 JDK 7)修复了该错误。
我收到此错误是因为我确实发布了我的ant release
失败,因为我的磁盘空间不足。
它今天为我抛出这个错误,因为我有一个最小 sdk 为 28 的应用程序,并且正在使用 SDK 版本为 23 的模拟器上播放。通常这是不可能的(AS 灰色的播放按钮),但今天不是这样很多。
经过一段时间和有关该主题的多个在线线程后,我设法修复了我的项目。
它主要考虑您放入的最后一个文件(可能是图像或布局)。如果您删除它们,它将起作用,您可以再次构建您的项目。
我在 Eclipse 控制台中遇到此错误。 事实证明,我有两个内容相同但名称不同的 jar 并且它们相互冲突。 我刚刚删除了其中一个并设法在设备上安装了该应用程序。
当我尝试在运行 api v23 的手机上安装针对 Android N 预览版构建的 Xamarin 项目时出现此错误。 解决方案是不要这样做。
获得此错误的另一种方法是在 macOS 上使用ant
进行构建,并在应用程序的源代码树中有一个 Finder 图标文件 ( Icon\\r
)。 看来jarsigner
不能在文件名中的回车应付,虽然它会声称,如果你的签署是有效-verify
的APK,它总是导致这不会在设备上安装的APK。 具有讽刺意味的是,Google Drive Finder 插件是 Finder 图标文件的重要来源。
该解决方案是用在这样的符排除违规的文件(这是无用的APK反正) fileset
:
<exclude name="**/Icon " />
如果您安装的是未签名版本的 APK,则会发生此问题。 检查您是否安装了正确的 APK。
我在使用 ionic / Visual Studio Code(在设备上运行 Android)时遇到了这个问题:
我在移动设备上卸载了应用程序(设置/应用程序),错误消失了,应用程序正在启动。
首先只是尝试这样做:
如果您使用的是模拟器,请尝试重置它,如果您在移动设备上先卸载应用程序,然后关闭开发人员模式,然后再打开它,问题将得到解决。
确保在 Android Studio 中将构建变体设置为调试(而不是发布)(检查构建变体面板)。
我在JetBrains Rider IDE 中遇到了这个问题。
完全错误
INSTALL_PARSE_FAILED_NO_CERTIFICATES:无法从 /data/app/vmdl1252907876.tmp/base.apk 收集证书:尝试获取空数组的长度
问题是使用 JDK8 的结果。 切换到 JDK11 解决了这个问题。
打开终端,写Clean project->回车->这个问题会在几秒钟内自动解决。
我试图通过编辑androidmanifest.xml
文件来更改default / main / startup(无论您如何称呼)活动。 我所做的就是更改android:name
属性。 但是,这完全破坏了整个应用程序。 当我尝试安装时失败并读取。
安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES
当我尝试将其更改回其先前的状态时,它仍然给我相同的错误……我做了什么?
对我来说,我忘记将新的签名配置添加到
Project Structure
-> Default Config
-> Signing Config
对我来说简单但愚蠢的修复是安装 JRE 和 JDK。
我使用全新安装的 Android Studio 启动了一个新的 Kotlin 项目,以进行工作分配。 我尝试为模拟电话构建默认模板并收到给定的错误。
我做了以下事情:
java -version
以确保它已安装。 它返回一个有效的版本消息。Play
按钮安装到我的模拟设备。对于在应用中心构建和分发的 Xamarin 用户,卸载可能无法解决此问题。 问题可能是如果您将目标 sdk 升级到 30+,您需要将您的密钥库文件重新上传到应用中心构建配置。 这将强制应用中心使用 v2 签名,这是 v30 以后的要求。 完全归功于此 github 问题评论
这个问题发生在我身上,在 android studio 上新的run on multiple devices
功能。
我有 3 个 api 级别为 22 、 27 和 30 的模拟器。我在多次运行选项中遇到了这个错误,但是当我在每个设备上分别安装我的应用程序时没有发生。
如果您使用 Azure 构建管道,并且您使用 Android 签名任务来签署您的 APK,请确保使用版本 3+ 来签署您的应用程序。 这将启用 Android 11+ 所需的 v2 方案 Android 签名。
也许,您已将构建变体从调试更改为发布。 发布变体需要特殊证书。 您可以在菜单 build->select 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。
现在再次尝试安装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.