天天看点

jarsigner命令行签名打包

    jarsigner签名,之前都是通过AS进行签名,通过这种方式也是可以签名的,需要提前把需要的东西准备好,现在把步骤记录在下面。(下面的操作都是在jdk的路径下进行操作)

        1.首先准备Jdk的路径(在android studio中查看方法):

jarsigner命令行签名打包

或者 :首先查看系统是否安装有jdk,打开cmd在DOS窗口输入  java -version查看jdk版本信息

然后把未签名的文件和 签名文件 , 放到一个 路径下,下面才是路径:

jarsigner命令行签名打包
jarsigner命令行签名打包

然后打开,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,之后输入签名文件的密码

jarsigner命令行签名打包

补充一张效果:

jarsigner命令行签名打包

         完成如图

如果是 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

签名结果:

jarsigner命令行签名打包

        apk 之所以需要签名, 是出于安全考虑的认证方式, apk 没有签名或者前后签名不一致都无法安装。 任何对apk的篡改都需要重新对apk签名才能安装, 由于篡改者是无法获取原始apk的秘钥信息,因此篡改后的apk由于签名不一致是无法替换原始apk的,这样既保证了apk的安全性,同时也保证了手机的安全和稳定性 。

包签名之后,再验证一下,是否签名成功。 

命令行:   jarsigner -verify [选项] jar 文件,现有下面三种情况:

        a. 未签名:

jarsigner命令行签名打包

        b.签名成功:

jarsigner命令行签名打包

        c .签名有问题的:

jarsigner命令行签名打包

           这种出现弱算法问题的,我这里是因为 -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):

jarsigner命令行签名打包

如下效果:

jarsigner命令行签名打包

至此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  这个路径下 

继续阅读