ioinic3---DOS命令下apk签名打包及常见问题解决

一、在DOS命令下对apk进行签名

首先我们需要将ionic项目中src目录里面的内容同步到android中,在使用DOS命令的时候一定要使用ionic cordova build android -release。  而不是ionic cordova build android.这样的签名生成的apk才能在手机上正常运行,否则可能出现“签名校验失败”的提示。

        然后在DOS命令中需要将我们的目录定位到ionic项目中的platforms/android目录下执行,否则可能会导致无法正常安装。

        在DOS命令下给apk签名一共需要用到3个工具(命令),分别是keytool、jarsigner和zipalign,下面附上对这3个工具的介绍:

 

  • keytool:生成数字证书,即密钥,是一个扩展名为.keystore的文件;
  • jarsigner:使用数字证书给apk文件签名
  • zipalign:对签名后的apk进行优化,提高与Android系统交互的效率(Android SDK1.6及以后版本开始包含此工具)

        这3个工具的执行顺序也如上所示。通常我们自己开发的应用,都是使用相同的签名,即使用同一个数字证书,这说明了如果你第一次做apk的签名,那上面3个工具都将用到,但如果你已经有数字证书了,那以后在给其他apk签名时,只需要用到jarsigner和zipalign这两个工具就可以了。下面给出了这3个工具默认所在的路径

  • keytool:位于jdk安装路径的bin目录下
  • jarsigner:位于jdk安装路径的bin目录下
  • zipalign:位于sdk安装路径的tools目录下

        为了使用方便,我们可以将这3个工具所在的路径添加到环境变量path中,但是一般我们安装jdk和sdk之后通过配置环境变量已经将路径添加到path中了。

        扩展:从上面的路径可以看到,keytool和jarsigner这两个工具是jdk自带的,也就是说生成数字证书和文件签名并不是android的专利,另外从字面上理解jarsigner也能猜想到该工具主要是用来给jar文件签名的。

        

        下面将要讲解在DOS命令下如何对apk进行签名:

         1.使用keytool工具生成数字证书

  

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

        说明:

  • keytool是工具名称,-genkey意味着执行的是生成数字证书的操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中
  • -keystore myself.keystore 表示生成的数字证书的文件名为“myself.keystore”
  • -alias myself.keystore 表示证书的别名为"myself.keystore“,当然可以不和上面的文件名一样
  • -keyalg RSA表示生成密钥文件所采用的算法为RSA;
  • -validity 20000 表示该证书的有效期是20000天,意味着20000天后该证书将失效

        在执行上面的命令生成数字证书文件时,会提示输入一些信息,包括证书的密码,还会出现是否确定?填写y,回车,示例如下:

       (注意:我在win10系统下输入密码在DOS系统中不会显示出来,但确实是输入进去了,不要怀疑你的键盘出了问题)

命令完成后会在当前目录中生成myself.keystore文件

 

 

如果想要查看签名的相关信息,在DOS命令行中输入:

keytool -list -keystore "myself.keystore"  输入你设置的keystore密码

         注意要在keystore所在的目录下,或者将keystore的完整路径填入

 

2.使用jarsigner工具为apk签名

2.1 jdk1.6版本命令:

jarsigner -verbose -keystore myself.keystore -signedjar demo_signed.apk demo.apk myself.keystore
  • jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来,显示在dos窗口中
  • -keystore myself.keystore表示签名所使用的数字证书所在位置,这里没有写路径,表示在当前目录下

如果不在当前文件夹下需要添加路径,示例如下:

jarsigner.exe -verbose -keystore d:\aa\myself.keystore -storepass android -signedjar d:\aa\demo_signed.apk d:\aa\demo.apk myself.keystore

 

  • signedjar demo_signed.apk demo.apk 表示给demo.apk文件签名,签名后文件名称为demo_signed.apk
  • 最后的myself.keystore表示证书的别名,对应于数字证书时-alias参数后面的名称

2.2 jdk1.8命令:(jdk1.8算法发生了变化,需要指定 -sigalg和-digestalg)

 

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myself.keystore -storepass android -signedjar demo_signed.apk demo.apk myself.keystore

 

在这里需要注意-storepass android 是我们直接输出了keystore文件的密码,android即我设置的密码,这里需要改成你自己的。如果不想直接写上去也可以去掉,执行命令后会提醒你输入密码。

其余的命令在2.1里已经讲过了

 

3.使用zipalign工具优化已经签名的apk(非必须但是建议这么做)

zipalign -v 4 demo_signed.apk demo_signed_aligned.apk

说明:

  • zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;
  • demo_signed.apk demo_signed_aligned.apk表示已经对签名文件demo_signed.apk进行了优化,优化后的文件名为demo_signed_aligned.apk

说明:如果你以前的程序是采用默认签名方式(即debug签名),一旦换了新的签名应用将不能覆盖安装,必须将原先的程序卸载掉,才能安装上

 

以上参考:http://www.cnblogs.com/share123/p/5900583.html

 

二、对于apk签名可能遇到的问题如下:

1.在进行重签名的时候无法对jar进行签名

提示”jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 7502 but got 6912 bytes)“,如图

 

解决办法:把要重签名的apk后缀改成zip,打开后删除里面的META-INF目录,然后重新改成apk后缀,最后在对这个apk进行签名即可

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值