如何给apk文件签名

转载 2013年12月05日 17:15:18
给apk文件签名主要分三步,创建证书(如果没有)-->签名-->优化(可选
)

1)使用jdk的keytool工具生成签名用的证书
>  keytool -genkey -v -keystore CERT.keystore -alias CERT -keyalg RSA -keysize 2048 -validity 10000 
创建过程需要输入一些标识信息和密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): 
    CERT.keystore ---- 证书保存的文件名 
    CERT ---- 证书的别名 
    10000 ---- 10000天的有效期 
    2048 ---- 默认为1024 bits,Android 建议使用2048 bits或更高
其他的详细信息可以使用keytool -help查看帮助 
证书生成后使用如下命令可以查看证书的信息:
> keytool -list -alias CERT -keystore CERT.keystore 

2)使用jdk的jarsigner工具对apk文件签名
> jarsigner -verbose -keystore CERT.keystore to_sign.apk CERT 
签名过程需要输入证书的密码,一些重要的参数值说明如下(根据自己的需要要进行相应的修改): 
    CERT.keystore ---- 证书保存的文件名 
    CERT ---- 证书的别名 
待签名的apk文件根根目录下如果有文件夹“META-INFO”,请先删除(重新签名就需要这样做)。
如果不想创建过程输出太多信息,可以删除“-verbose” 。
上述签名会直接覆盖原来的文件,如果不想被覆盖而签名为另外的新文件 signed.akp,
只需将 to_sign.apk 改为 -signedjar to_sign.apk signed.akp 即可。
jarsigner -keystore CERT.keystore -signedjar target.apk  source.apk CERT
签名后可以使用如下命令验证是否签名成功: 
> jarsigner -verify to_sign.apk 
如果需要查看更详细的验证信息,可修改为:
> jarsigner -certs -verbose -verify to_sign.apk 

3)使用android sdk的zipalign工具优化已签名的apk文件
> zipalign -v 4 unaligned.apk aligned.apk 
注意要在签名后再zipalign。这个工具不是jdk自带的,而是在%ANDROID_HOME%\tools\zipalign.exe。




--------------------------------

在给生成的apk签名,jdk1.6升级到jdk1.7会出现以下问题:

1.明明签名了,并且签名检查apk中也有签名文件,但是安装的时候就是提示安装失败,没有签名,解决办法

将签名命令上加一段话: -digestalg SHA1 -sigalg MD5withRSA 加上后就可以了

旧:jarsigner -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test

 新:jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test

这样签名完成后就可以安装成功了。

2.以上方法可以解决签名后不能安装成功的问题,但是会发现有警告:

警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期
日期 (2063-07-18) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。

入有这个警告的话本身对签名没有影响,但是总感觉怪怪的,要想去掉这个警告只要在命令上再加上 -tsa https://timestamp.geotrust.com/tsa 就可以了

最终命令是:

 jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test


如何对apk文件进行签名

有没有发现自己重新打包过后的
  • Roland_Sun
  • Roland_Sun
  • 2014年05月21日 11:44
  • 4448

查看已经打包好的APK文件的签名与给打包好的APK文件签名

说明:此操作是在MAC系统上进行的,对于windows系统是否适用没用试验过。 1.查看APK签名     将.apk文件更改为后缀名为.zip文件,然后解压文件,里面有一个META-INF文件,...
  • luck_136
  • luck_136
  • 2016年07月26日 14:12
  • 3830

利用脚本快速更换apk中的资源并且完成重签名

本人就职于游戏公司SDK研发部门,但是经常出现修改几行java层的SDK代码就要重新打游戏包的痛苦。因为手游动辄上百M,如果只更新这几行java层代码或者更换了里面一个图片资源,再重新上打包机部署打包...
  • StrangeNightmare
  • StrangeNightmare
  • 2016年09月08日 15:18
  • 2634

获取apk签名的方法

获取本地文件系统中apk文件的签名方法 public static String getAPKSignatures(String apkPath) { File appFile = n...
  • bangelua
  • bangelua
  • 2015年03月19日 23:26
  • 2131

给第三方apk进行系统签名的几种方式

一、Android中的签名 系统默认的四种签名类型: 四组默认签名供Android.mk在编译APK使用: 1、testkey:普通APK,默认情况下使用。 2、pla...
  • u012041204
  • u012041204
  • 2017年06月27日 21:02
  • 794

在命令行使用已存在的keystore对apk包进行签名

在命令行使用已存在的keystore对apk包进行签名
  • wuzhipeng1991
  • wuzhipeng1991
  • 2015年10月22日 14:09
  • 3364

apk签名冲突 与旧版不同解决办法 apk签名比对

最近刚接手一个应用,更新了一些内容后想在测试机器上进行调试,结果AndroidStudio提示   Installation failed since the device already has...
  • gediseer
  • gediseer
  • 2017年02月17日 20:52
  • 2323

Android为apk重新签名

前言重新签名,在一些地方有一些用途。
  • dabaoonline
  • dabaoonline
  • 2016年09月09日 15:48
  • 1514

查看第三方APK的签名的方法(.keystore .RSA .APK)

直接进入你自己的系统JDK版本bin目录下。用cmd打开进入。 可查看  MD5  SHA1  SHA256算法签名。 1、查看 keystore   $ keytool -list...
  • u012067966
  • u012067966
  • 2016年01月07日 17:56
  • 3698

替换APK文件内容后重新打包签名脚本

由于业务需求,需要替换APK文件内容后重新打包签名,调研后发现使用JDK里提供的命令可以很方便地实现。关键命令如下: jar -uf:替换apk文件内的某个文件或文件夹。 jarsigner:为ap...
  • viviwen123
  • viviwen123
  • 2015年02月03日 15:16
  • 3275
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何给apk文件签名
举报原因:
原因补充:

(最多只允许输入30个字)