前言
为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必须加固后才能上架。另外存在一部分免费加固apk后会删除AndroidStudio打包的签名,需要我们重新签名,这就是本文的由来。
使用工具介绍
jarsigner
jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner,比如我的 jarsigner 工具的位置在:E:\devlop_tool\Java\jdk1.8.0_161\bin
apksigner
apksigner 是 Google 官方提供的针对 Android Apk 签名和验证的专用工具,位于 Android SDK/build-tools/SDK 版本/apksigner 。
以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在:E:\devlop_tool\AndroidSDK\build-tools\30.0.2
下面,我们将使用jarsigner 和 apksigner 两种签名工具分别进行演示。
一. 使用jarsigner签名
1.首先cmd进入jdk的bin目录
2.使用下面签名命令 (以oppo应用转移空包签名为例)
jarsigner -verbose -keystore 证书签名文件路径 -signedjar 签名后新Apk路径.apk 要签名的Apk路径.apk 证书签名别名
3.示例代码(最好指定打包路径方便寻到,以免到bin目录导致异常)
jarsigner -verbose -keystore F:\relealseProject\jiagu\xxx.jks -signedjar F:\relealseProject\unsign\vivo_sign.apk F:\relealseProject\unsign\vivo_unsign.apk xxx
4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名
注意:证书别名一定填写正确(不然报错:请指定别名)。输出apk名字和要签名的apk顺序不要错乱(不然报错:jarsigner: 无法打开 jar 文件)
二. 使用apksigner签名
1.首先cmd进入jdk的bin目录
2.使用下面签名命令 (以oppo应用转移空包签名为例)
apksigner sign --ks 证书签名文件路径 --ks-key-alias 证书签名别名 要签名的apk路径.apk
3.示例代码
apksigner sign --ks F:\relealseProject\jiagu\XXX.jks --ks-key-alias XXX F:\workdir\gitlab\xxx\app\release\XXX.apk
4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名
注意:输入密钥库的密码后,直接就输出完毕了,什么情况?这就完成了?是的,因为 apksigner 是对整个 Apk 包进行验证签名,所以没有其它的输出信息。会发现多了一个后辍名为 .idsig
的,这个可以不用处理,直接删掉也没问题。
简单了解 v1 签名和 v2 签名的区别
注:该段描述主要参考链接地址为 点击此处,如有描述不当之处,欢迎指正。
v1 签名
在 Android 7.0 (即 Android N,Android Api 24) 以下的版本,只能使用旧签名方案,也就是 v1 签名。
v1 签名使用 JDK 的 jarsigner 工具,对 zip 压缩包的每个文件进行验证,签名后仍可对压缩包进行修改、移动、重新压缩文件。
v2 签名
自 Android 7.0 开始,Google 新增了 v2 签名方案。
v2 签名使用 Google 自带的 apksigner 工具,对 zip 压缩包的整个文件进行验证,签名后不能修改压缩包,包括 zipalgin 。
如果你对 v2 签名的 apk 解压,没有发现签名文件,重新压缩后 v2 签名失效,这说明 v2 签名是对整个 Apk 进行签名验证。
v2 签名相对 v1 签名的优点
- 因为不能修改压缩包,所以 v2 签名会更安全。
- v2 签名是对整个 Apk 进行签名验证,不需要解压验证,所以签名验证的时间会更短。
两者区别说明:
jarsigner 只支持 v1 签名
apksigner 工具默认同时使用 v1 和 v2 签名,以兼容 Android 7 以下的系统版本。
检查 Apk 是否已签名 v1、v2、v3、v4,并对比两者的区别
在终端输入如下命令即可
apksigner verify -verbose -print-certs 要检查的Apk路径.apk
- jarsigner
- apksigner
结束语
由上图可知两者签名的区别,各位看官根据需要使用即可。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。