代码之家  ›  专栏  ›  技术社区  ›  mtmurdock

什么是安装分析失败的证书错误?

  •  112
  • mtmurdock  · 技术社区  · 14 年前

    我试图通过编辑 androidmanifest.xml 文件。我所做的就是改变 android:name 财产。然而,这完全破坏了整个应用程序。当我尝试安装时,它会失败并读取。

    安装错误:安装\分析\失败\没有\证书

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

    18 回复  |  直到 5 年前
        1
  •  45
  •   Nir Duan    8 年前

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

    Every Android .apk needs to be signed if it is going to be installed on a phone ,即使您没有通过市场安装。开发工具通过用开发证书签名来解决这个问题,但是 APK 仍有签名。

    这种方法的一个用途是,设备可以判断 APK 是已安装应用程序的有效升级,因为如果是,证书将相同。

    因此,如果对应用程序进行任何更改,则需要重新生成 APK 所以它得到了正确的签名。

        2
  •  135
  •   Paul Ratazzi Ronaldo Albertini    7 年前

    我发现当使用错误的签名配置时,也会发生此错误。如前所述, here ,android 7.0引入了一个新的签名方案, v2 。V2方案对整个APK进行签名,而不仅仅是JAR,正如在V1方案中所做的那样。如果只使用v2进行签名,并尝试在7.0之前的目标上安装,则会出现此错误,因为jars本身没有签名,而pre-7.0 PackageManager cannot detect the presence of the v2 apk signature.

    要与所有目标系统兼容,请通过选中Android Studio中的两个签名版本框,确保APK与两个方案都签名,如图所示:

    如果预计只有7.0个目标,则无需包括v1签名。

    ,android 7.0引入了新的签名方案, V2 . V2方案对整个APK进行签名,而不仅仅是JAR,正如在V1方案中所做的那样。如果只使用v2进行签名,并尝试在7.0之前的目标上安装,则会出现此错误,因为jar本身没有签名,而pre-7.0 包装工人 无法检测到v2 apk签名的存在。

    要与所有目标系统兼容,请通过选中Android Studio中的两个签名版本框,确保APK与两个方案都签名。 生成签名apk 对话框如下所示:

    enter image description here

    如果预计只有7.0个目标,那么就不需要包括v1签名。

        3
  •  52
  •   Community nesinervink    7 年前

    我发现这是我的JDK版本造成的。

    我在“Ant”上遇到了这个问题,这是由于文档中提到的警告:

    http://developer.android.com/guide/publishing/app-signing.html#signapp

    警告:自JDK 7起,默认的签名算法已更改,要求您在签署APK时指定签名和摘要算法(-sigalg和-digestalg)。

    我有JDK 7。在我的Ant日志中,我用-v表示verbose,它显示

    $ 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]
    

    我手动签署了这个罐子,并对其进行了压缩,但是它给出了一个稍微不同的错误:

    $ "$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:\程序文件\java\Android SDK\Tooo\At\Budio.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}" />
    
        4
  •  16
  •   Community nesinervink    7 年前

    在keytool中解决了args

    -sigalg MD5withRSA -keyalg RSA -keysize 1024
    

    在Jarsigner中使用

    -sigalg MD5withRSA -digestalg SHA1
    

    在中找到解决方案

    What kind of pitfals exist for the Android APK signing?

        5
  •  16
  •   Ronan Boiteau    6 年前

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

    1. 卸载您的APK
    2. 清理你的Android项目
    3. 构建你的Android项目
    4. 安装/运行APK
        6
  •  5
  •   User    12 年前

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

    在阅读了Chloe的答案之后,我卸载了我的JDK7(目前不需要它),并安装了JDK6。那是固定的。更好的解决方案将使Ant使用JDK6(不卸载7)。可能更改/设置此属性:

    java.library.path路径

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

    Android无论如何都不支持JDK7(只有6或5个),所以让Ant脚本也使用JDK6或5可能是一个很好的解决方案。

        7
  •  5
  •   Kristopher Johnson    11 年前

    在我的例子中,我可以构建和运行发布版本,但是 INSTALL_PARSE_FAILED_NO_CERTIFICATES 尝试进行调试生成时出错。

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

    一个更好的长期解决方案是显式地创建 调试密钥存储库 它不会在一年后到期,而不会让ADT创建它。下面是执行此操作的命令:

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

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

    • 名字和姓氏: 安卓调试
    • 组织单位: 安卓
    • 组织名称: 未知
    • 城市或地区: 未知
    • 州或省: 未知
    • 国家代码: 美国
        8
  •  4
  •   Pankaj kumar    7 年前

    因为先前生成的build和current的签名版本在v1(jar签名)和v2(完整apk签名)之间存在冲突,

    在生成已签名的APK对话框下修复勾选正确的签名版本

        9
  •  2
  •   znat    11 年前

    如果您尝试包含 .jar 包含 AndroidManifest.xml 文件。

    • 如果是纯Java,请确保不在.jar导出中包含它。
    • 如果它不是纯Java(意味着它是一个Android项目),那么你必须把它作为一个图书馆项目。
        10
  •  1
  •   TN.    12 年前

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

        11
  •  1
  •   Otieno Rowland    6 年前

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

        12
  •  0
  •   Nikhil Freddroid    12 年前

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

    主要考虑最后的文件( 可能是图像或布局 )你放进去的。如果您删除它们,它将得到解决,您可以重新构建您的项目。

        13
  •  0
  •   joao2fast4u    10 年前

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

        14
  •  0
  •   Red Cricket    8 年前

    我得到这个错误是因为我发布了 ant release 因为磁盘空间不足而失败。

        15
  •  0
  •   James Moore    8 年前

    当我试图在运行api v23的手机上安装一个针对android n preview构建的xamarin项目时,出现了这个错误。解决办法是不要这样做。

        16
  •  0
  •   Perry    7 年前

    另一种获得此错误的方法是使用 ant 在MacOS上有一个查找图标文件( Icon\r )在应用程序的源代码树中。它出现了 jarsigner 无法处理文件名中的回车,尽管它将声明签名是有效的,如果您 -verify 在apk中,它总是导致apk无法安装在设备上。具有讽刺意味的是,Google Drive Finder插件是Finder图标文件的重要来源。

    解决方案是排除有问题的文件(无论如何在APK中是无用的),在 fileset :

        <exclude name="**/Icon&#13;" />
    
        17
  •  0
  •   NeeK    5 年前

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

        18
  •  0
  •   Michael Maier    5 年前

    我在使用离子/Visual Studio代码(在设备上运行android)时遇到了这个问题:

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