【Android开发】jarsigner重新打包apk

签名(sign):在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核。

过程:使用私有密钥数字地签署一个给定的应用程序。

作用
识别应用程序作者;
检測应用程序是否发生改变;
有种程序升级。当新程序与旧程序签名不一致时,会发生冲突觉得不是同一APP,,要求新程序改包名。

签名步骤:

1. 安装并配置jdk;

2. 进入jdk目录

cd C:Program FilesJavajdk1.8.0in

3. 生成android.keystore

keytool -genkey -v -keystore android.keystore -alias android.keystore -keyalg RSA -validity 20000

注意:

  • -keystore 后边紧跟 "android.keystore" 的是要生成的签名文件;
  • -alias 后边紧跟 "android.keystore" 的是签名文件的别名;


此时在jdk的bin目录,已经生成了一个证书: android.keystore

4. 进行签名

jarsigner -verbose -keystore android.keystore -signedjar [签名后的apk路径+文件] [未签名的apk路径+文件] android.keystore

注意:

  • -keystore 后边紧跟 "android.keystore" 的是上一步生成的签名文件;
  • 最后一个词 "android.keystore" 是上一步指定的签名文件的别名;
  • 如果不是 “.keystore” 类型的签名文件,而是 “.jks” 类型的,也可以拿过来直接替换使用。

此时会出现一行警告:

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

jarsigner 签名命令里加入如下参数来解决:

-digestalg SHA1 -sigalg MD5withRSA

可以忽略,安装后测试是否可行!

5.验证签名

jarsigner -verify XiaomiVerifysignd.apk

6. 优化apk
不过需要把build-tools下的zipalin包放到tools下

zipalign -v 4 XiaomiVerifysignd.apk XiaomiVerifysignd_new.apk

附加:

1. 根据 “.jks" 文件或者 ".keystore" 文件获取签名信息

keytool -list -v -keystore [keystore文件名 或者 jks文件名]

从中可以看到各种信息,其中就包含上边提到的别名,所以如果忘记或者不知道别名,可以再次获取到。

2, 查看apk的签名信息

jarsigner -verify -verbose -certs [keystore文件名 或者 jks文件名]

备注: 其他参数可以参考:http://www.cnblogs.com/gccbuaa/p/7092556.html

原文地址:https://www.cnblogs.com/neo-java/p/10185011.html