jarsigner签名,之前都是通过AS进行签名,通过这种方式也是可以签名的,需要提前把需要的东西准备好,现在把步骤记录在下面。(下面的操作都是在jdk的路径下进行操作)
1.首先准备Jdk的路径(在android studio中查看方法):
或者 :首先查看系统是否安装有jdk,打开cmd在DOS窗口输入 java -version查看jdk版本信息
然后把未签名的文件和 签名文件 , 放到一个 路径下,下面才是路径:
然后打开,keytool, 打开一个命令窗口, 在keytool的 窗口下,打开 -jer 命令
2. 然后打开cmd,进入到上面的jdk路径下。
准备工作,把需要签名的文件 abc-unsigned.apk 和签名文件 abc.keystore (别名是abb) 放到jdk的路径下。
然后开始在cmd中输入命令行:
jarsigner -verbose -keystore abc.keystore -signedjar abc_signed.apk abc_unsign.apk abb
上面这一句命令行中需要改变的参数值是:
abc.keystore apk需要的签名文件
abc_signed.apk 签好名之后apk的名字
abc_unsign.apk 未签名的apk名字
abb 签名的别名
3.Enter,之后输入签名文件的密码
补充一张效果:
完成如图
如果是 jdk 1.8 命令行还需要补充一下:
最近将电脑中的JDK升级到了最新的JDK8,没想到在给apk打包签名的时候,发现使用JDK8中的jarsigner命令签名的apk无法安装。最终在android sdk官网http://developer.android.com/查寻到原因
介绍中有一条注意事项,说JDK7修改了默认的签名算法,所以给apk签名时要自己通过jarsigner命令的-sigalg 和 -digestalg选项分别指定签名算法名字和摘要算法名字,官方文档中给定算法分别是SHA1withRSA和SHA1
JDK1.8 命令:(需要指定tsa,如下面指令)
jarsigner -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1 -verbose -keystore android.keystore -signedjar signed.apk unsign.apk alias_name
时间 : -tsa http://timestamp.digicert.com
签名算法名字: -sigalg
摘要算法名字: -digestalg
签名结果:
apk 之所以需要签名, 是出于安全考虑的认证方式, apk 没有签名或者前后签名不一致都无法安装。 任何对apk的篡改都需要重新对apk签名才能安装, 由于篡改者是无法获取原始apk的秘钥信息,因此篡改后的apk由于签名不一致是无法替换原始apk的,这样既保证了apk的安全性,同时也保证了手机的安全和稳定性 。
包签名之后,再验证一下,是否签名成功。
命令行: jarsigner -verify [选项] jar 文件,现有下面三种情况:
a. 未签名:
b.签名成功:
c .签名有问题的:
这种出现弱算法问题的,我这里是因为 -sigalg 属性填写的MD5withRSA ,与自身的这个属性没有匹配,
所以解决方法, 通过下面命令行,查看自己签名文件的信息,把那个签名算法名称填写到 -sigalg后面,然后再次签名
(相关链接:https://jingyan.baidu.com/article/49711c61489e72fa441b7cf0.html?st=2&net_type=1&bd_page_type=1&os=0&rst=)
Keytool -list -v - alias 别名 -keystore 签名文件.keystore -storepass 签名密码
通过查看签名key的信息,填写上面的内容(http://p.primeton.com/articles/53b3bbb0e138235d650000a4):
如下效果:
至此jdk 1.8 签名完成,希望可以帮助大家。
在默认的jdk 安装目录下 如: C:\Program Files\Java\jdk1.7.0_09\bin 下的keytool.exe 工具 用cmd 打开
打包时,jdk1.8时的路梳理:
jarsigner -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1 -verbose -keystore dianzhuan.keystore -signedjar signmssp-verify.apk mssp-verify.apk dianzhuanshichang
jdk的路径 : 可以在控制面板中看这个东西, 笔记本中在 E:\JAVAJDK\Java\bin 这个路径下