我试图通过编辑androidmanifest.xml
文件来更改我的默认/主/启动(无论你怎么称呼)活动。我所做的只是改变了android:name
财产。然而,这完全打破了整个应用程序。当我尝试安装它失败并读取。
安装错误:INSTALL_PARSE_FAILED_NO_CERTIFICATES
当我试图将它改回以前的状态时,它仍然给我同样的错误......我做了什么?
你有没有直接在AndroidManifest.xml
文件中编辑.apk
?如果是这样,那将无效。
Every Android .apk
needs to be signed if it is going to be installed on a phone,即使您没有通过市场安装。开发工具通过签署开发证书来解决这个问题,但.apk
仍然签名。
这样做的一个用途是设备可以判断.apk
是否是已安装应用程序的有效升级,因为如果它是证书将是相同的。
因此,如果您对应用程序进行任何更改,则需要重建.apk
以便正确签名。
我也面临同样的问题。首先,我使用V2生成构建并将其安装在OS 5.1上运行的移动设备中,我遇到了同样的问题。但是在OS 7.0上运行的平板电脑上运行正常。所以我使用V1 Jar签名生成了构建,并且它在两个设备上都运行良好。
结论:如果您支持android OS 7.0以下的设备。使用V1 jar签名生成构建。
如果您尝试包含包含.jar
文件的AndroidManifest.xml
库,则可能会发生这种情况。
将环境变量JAVA_HOME
设置为JDK 5或6(而不是JDK 7)修复了错误。
经过一段时间和关于这个主题的多个在线主题,我设法修复了我的项目。
它主要考虑到您放入的最后一个文件(可能是图像或布局)。如果删除它们,它将会运行,您可以再次构建项目。
我在Eclipse控制台中遇到此错误。事实证明,我有两个相同内容但名称不同的罐子,彼此之间存在冲突。我刚刚删除其中一个,并设法在设备上安装该应用程序。
我收到此错误是因为我确实发布了我的ant release
失败,因为我的磁盘空间不足。
当我尝试在运行api v23的手机上安装针对Android N预览的Xamarin项目时出现此错误。解决方案是不要那样做。
获得此错误的另一种方法是在macOS上使用ant
构建,并在应用程序的源代码树中有一个Finder图标文件(Icon\r
)。看来jarsigner
无法应对文件名中的回车,虽然它会声称签名是有效的,如果你-verify
APK,它总是会导致一个APK不会安装在设备上。具有讽刺意味的是,Google Drive Finder插件是Finder图标文件的绝佳来源。
解决办法是在fileset
中使用这样的说明符排除违规文件(在APK中无用)。
<exclude name="**/Icon " />
如果您要安装未签名的APK版本,则会出现此问题。检查您是否安装了正确的APK。
我有离子/ Visual Studio代码的问题(在设备上运行Android):
我在移动设备上卸载了应用程序(设置/应用程序),错误消失了,应用程序正在启动。
我发现使用错误的签名配置时现在也会发生此错误。如here所述,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签名。
我发现这是由我的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并对其进行了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)
我发现这里回答了。
How to deal with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES without uninstallation
我只需要卸载它然后它工作!
$ 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
找到的解决方案
这是一个丑陋但快速的解决方案:使用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可能是一个很好的解决方案。
在我的情况下,我可以构建和运行发布版本,但在尝试进行调试构建时遇到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
出现提示时,输入以下值:
因为之前生成的构建和当前在v1(jar签名)和v2(完整APK签名)之间的签名版本中存在冲突,
要在Generate Signed APK对话框下修复正确的签名版本
在较新的Android Studio 3.2+版本中,如果您尝试运行release
install,并且尚未定义任何签名配置,则会显示错误提示并且安装将失败。您需要做的是运行debug
构建或正确设置签名配置(V1或V2)。