`

Android生成签名文件并用其对apk文件进行签名(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误完美解决)

 
阅读更多

最近编程时遇到问题:写了一个android小程序,打包后用apktool反编译再打包都没问题,安装时出现Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]错误,网上查资料原来是签名的问题,解决方案如下。

 

《一》使用命令行生成签名文件 

(1)创建一个用来存放签名文件的文件夹Android_keystore
(2)在命令行窗口中输入命令:(粗体部分) 

[java] view plaincopy
  1. D:\Android_keystore>keytool -genkey -alias aeo_android.keystore -keyalg RSA -val  
  2. idity 20000 -keystore aeo_android.keystore  

 

[java] view plaincopy
  1. 输入密钥库口令:  
  2. 再次输入新口令:  
  3. 您的名字与姓氏是什么?  
  4.   [Unknown]:  localhost  
  5. 您的组织单位名称是什么?  
  6.   [Unknown]:  btbu  
  7. 您的组织名称是什么?  
  8.   [Unknown]:  btbu  
  9. 您所在的城市或区域名称是什么?  
  10.   [Unknown]:  beijing  
  11. 您所在的省/市/自治区名称是什么?  
  12.   [Unknown]:  beijing  
  13. 该单位的双字母国家/地区代码是什么?  
  14.   [Unknown]:  cn  
  15. CN=XiaoFeng, OU=btbu, O=btbu, L=beijing, ST=beijing, C=cn是否正确?  
  16.   [否]:  y  





输入 <aeo_android.keystore> 的密钥口令

        (如果和密钥库口令相同, 按回车):

 

这时会在D盘的Android_keystore文件夹下生成aeo_android.keystore文件,就是我们需要的签名文件,(-validity 20000 表示证书的有效天数为20000天) 

《二》用生成的签名文件对apk文件进行签名 
(1)在Eclipse中用“Export the unsigned apk”工具导出项目,这里保存到D盘的Android_keystore文件夹下,名为testbim.apk 

(2)使用jarsigner给 testbim.apk 文件签名,如下所示:

 

[java] view plaincopy
  1. D:\Android_keystore>"C:\Program Files\Java\jdk1.6.0_30\bin\jarsigner.exe" -verbo  
  2. se -keystore aeo_android.keystore -signedjar testbim_signed.apk testbim.apk aeo_  
  3. android.keystore  
  4. 输入密钥库的口令短语:  
  5.    正在添加: META-INF/MANIFEST.MF  
  6.    正在添加: META-INF/AEO_ANDR.SF  
  7.    正在添加: META-INF/AEO_ANDR.RSA  
  8.   正在签名: res/drawable-hdpi/ic_action_search.png  
  9.   正在签名: res/drawable-hdpi/ic_launcher.png  
  10.   正在签名: res/drawable-ldpi/ic_launcher.png  
  11.   正在签名: res/drawable-mdpi/ic_action_search.png  
  12.   正在签名: res/drawable-mdpi/ic_launcher.png  
  13.   正在签名: res/drawable-xhdpi/ic_action_search.png  
  14.   正在签名: res/drawable-xhdpi/ic_launcher.png  
  15.   正在签名: res/layout/activity_main.xml  
  16.   正在签名: res/layout/two.xml  
  17.   正在签名: res/menu/activity_main.xml  
  18.   正在签名: AndroidManifest.xml  
  19.   正在签名: classes.dex  
  20.   正在签名: resources.arsc  

 

 

keytool 是个密钥和证书管理工具。jarsigner 工具利用密钥仓库中的信息来产生或校验 Java 存档 (JAR) 文件的数字签名 (JAR 文件将类文件、图象、声音和/或其它数字化数据打包在一个文件中)。

这两个工具都是JDK自带的,所以你当前需要先确保JDK安装正确。并且环境变量设置正确,以便可以以命令行的方式进行处理。


输入密匙的口令短语: 
...... 
通过上面的命令就可以讲未签名的testbim.apk 文件签名为

[java] view plaincopy
  1. testbim_signed.apk  


(3)最后验证是否签名成功 
Android_keystore>"C:\Program Files\Java\jdk1.6.0_30\bin\jarsigner.exe" -verify testbim_signed.apk
如果成功则 
输出: 

jar 已验证 

( 4 )安装到虚拟机上

搞定~

 

命令参数说明:

-genkey    产生证书文件 
-keystore  指定密钥库的.keystore文件中 

-keyalg     指定密钥的算法

-validity    为证书有效天数,这里我们写的是20000天。 
-alias       产生别名 

在输入密码时没有回显,只管输入就可以了,一般位数建议使用20位,切忌需要记下来后面还要用,

注意:

1、CN(Common Name - 名字与姓氏):其实这个“名字与姓氏”应该是域名,比如说localhost或是blog.devep.net之类的。输成了姓名,和真正运行的时候域名不符,会出问题。浏览器访问时,弹出一个对话框,提示“安全证书上的名称无效,或者与站点名称不匹配”,用户选择继续还是可以浏览网页。但是用http client写程序访问的时候,会抛出类似于“javax.servlet.ServletException: HTTPS hostname wrong: should be ”的异常。

2、在用keytool生成数字证书时必须保证:-keystore androidapp.keystore -alias androidapp.keystore 两者名称必须相同。否则下一步签名时会出现错误:jarsigner: 找不到 androidapp.keystore 的证书链。androidapp.keystore 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。

 

查看帮助

$jarsigner -h
用法:jarsigner [选项] jar 文件别名(key的别名)
       jarsigner -verify [选项] jar 文件

[-keystore <url>]           密钥库位置

[-storepass <口令>]         用于密钥库完整性的口令

[-storetype <类型>]         密钥库类型

[-keypass <口令>]           专用密钥的口令(如果不同)

[-sigfile <文件>]           .SF/.DSA 文件的名称

[-signedjar <文件>]         已签名的 JAR 文件的名称

[-digestalg <算法>]    摘要算法的名称

[-sigalg <算法>]       签名算法的名称

[-verify]                   验证已签名的 JAR 文件

[-verbose]                  签名/验证时输出详细信息

[-certs]                    输出详细信息和验证时显示证书

[-tsa <url>]                时间戳机构的位置

[-tsacert <别名>]           时间戳机构的公共密钥证书

[-altsigner <类>]           替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]               在签名块内包含 .SF 文件

[-sectionsonly]             不计算整个清单的散列

[-protected]                密钥库已保护验证路径

[-providerName <名称>]      提供者名称

[-providerClass <类>        加密服务提供者的名称
  [-providerArg <参数>]] ... 主类文件和构造函数参数

  

分享到:
评论

相关推荐

    Android模拟器安装APP出现INSTALL_FAILED_NO_MATCHING_ABIS错误解决方案

    Android模拟器安装APP出现INSTALL_FAILED_NO_MATCHING_ABIS错误解决方案 当我们想在电脑的Android模拟器中安装APP的时候,会报INSTALL_FAILED_NO_MATCHING_ABIS错误【如图1】,导致APP无法在模拟器中运行。下面给出...

    IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    解决“INSTALL_PARSE_FAILED_NO_CERTIFICATES”错误的方法: 1. **检查签名**:确保你的APK已经正确签名。你可以使用`jarsigner`工具或者IDEA内置的签名功能来检查和修复签名问题。 2. **调整minSdkVersion**:...

    ApkIDE3.3.0.0作者原版,解决常见apk打包安装问题.rar

    adb: failed to install SystemActivities.apk: Failure [INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: /data/app/vmdl1716187195.tmp/base.apk (at Binary XML file line #0): Requires newer...

    apk反编译,打包及签名工具(附详细使用说明)

    Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] --- 没有签名,可以尝试test证书;签名方法见下面。 Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] ---- 已存在签名,但使用证书不对,可以尝试使用...

    apk签名终端命令

    当遇到`INSTALL_PARSE_FAILED_NO_CERTIFICATES`错误时,这通常意味着APK没有正确的签名或者签名不完整。解决办法就是按照上述步骤重新生成并应用签名。 在实际操作中,有时需要创建一个特定的目录来存放签名文件,...

    实现类似av_parser_parse2功能

    在解决这个问题时,我们需要确保每次调用`av_parser_parse2`时,传递的缓冲区足以容纳一个完整的NAL单元,或者至少包含一个完整的起始码和NAL头。如果输入数据是从文件读取的,需要循环读取数据,直到找到一个完整的...

    Android安装应用 INSTALL_FAILED_DEXOPT 问题及解决办法

    今天在帮助客户解决一个问题时,由于他们的手机是用的5.0系统身边没有5.0系统的手机,只能用一个模拟器来安装测试应用,但是在安装过程中碰到了以下问题: The application could not be installed: INSTALL_FAILED...

    CANoe入门文件.rar_canoe pbf文件_dbc_dbc parse_汽车 CAN_汽车CANoe

    汽车行业CAN分析工具有很多,目前汽车工程师主流使用的是CANoe作为分析工具

    android studio签名打包详解,字节跳动最新开源(csdn)————程序.pdf

    报错信息可能是“INSTALL_PARSE_FAILED_NO_CERTIFICATES”。为了确保所有设备都能安装,建议同时启用v1和v2签名。 签名过程可能出现的问题之一是多渠道打包时,如果使用了META-INF文件,可能会导致安装时找不到安装...

    Ubuntu(Linux)反编译apk(apktool)

    打包生成apk,执行:./apktool b xxx,会在xxx里面生成,一个dist目录,里面就是xxx.apk,但不能安装滴,提示(Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]),没有给这个apk签名, 5 . 签名,执行:sh ./dex...

    adb1.0.26包含fastboot.exe

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。...INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 已安装该应用,且签名与 APK 文件不一致 先...

    apk_parse, use python parse APK, get package name, file md5, apk icon.....zip

    apk_parse, use python parse APK, get package name, file md5, apk icon....

    sql_parse_src.rar_C语言 sql解析_sql parse _sql_parse_sqlparse c++_s

    标题中的"sql_parse_src.rar"表明这是一个关于SQL解析的源代码包,主要使用C++语言实现,其中可能包含了对SQL语句的解析功能。描述提到这是"一套解析SQL语句的c代码,基于ansi c++",这暗示了库遵循ANSI C++标准,...

    Android 自动更新 下载文件 APK

    本文将深入探讨如何实现Android应用程序的自动更新机制,特别是在下载APK文件方面。我们将基于名为"DownLoadDemo"的源代码实例进行讨论。 1. **Android权限设置**: 在AndroidManifest.xml文件中,需要添加必要的...

    Jboss启动报Failed to parse WEB-INFweb.xml; - nested throwable错误

    但是,如果web.xml文件存在语法错误或配置错误,Jboss将无法正确地解析该文件,从而导致启动报错Failed to parse WEB-INF/web.xml; - nested throwable。 错误分析 从错误日志中可以看到,Jboss在启动时抛出了一个...

    command_line_parse_xml

    command_line_parse_xml

    sa3_xlsx_parse_.zip

    解决PHPExcel不能够解析Excel表单里面的勾选框问题,使用文件sa3_xlsx_parse_来进行解析:一. 本地运行 1. 将新调研表的xlsx文件放置于根目录下的 xlsx 文件夹中 2. 命令行运行: ``` npm run parse ``` 3. 读取结果...

    Java代码解析指定apk文件

    在Android开发领域,APK文件是应用程序的二进制包,包含了应用的所有资源、代码、配置文件等。本文将深入探讨如何使用Java代码解析指定的APK文件,从而获取其中的关键信息。 首先,理解APK文件的结构至关重要。APK...

    cvs_java_parse.rar

    在IT行业中,CVS(Concurrent Versions System)是一种版本控制系统,用于管理软件开发中的源代码和其他文件。Java作为广泛使用的编程语言,与CVS结合使用,可以帮助开发者追踪代码的修改历史,协同工作,并确保团队...

    Android-Android取得未安装的APK的名字Manifest配置文件里的label名字

    在Android开发中,有时我们需要对APK文件进行操作,例如管理本地存储的APK或获取其相关信息,而无需实际安装应用程序。在这种情况下,一个常见的需求是获取未安装APK的应用名称,即用户在启动器(Launcher)中看到的...

Global site tag (gtag.js) - Google Analytics