1.使用keytool 生成数字证书
keytool -genkey -v -keystore myApp.keystore -alias myApp.keystore -keyalg RSA -validity 36500
- keytool是工具名称-genkey意味着执行的是生成数字证书操作
- -v表示将生成证书的详细信息打印出来,显示在dos窗口中
- -keystore myApp.keystore表示生成的数字证书的文件名为“myApp.keystore”(myApp可以取自己的名字)
- -alias myApp.keystore表示证书的别名为“myApp.keystore”,可以不和上面的文件名一样
- -keyalg RSA表示生成密钥文件所采用的算法为RSA
- -validity 36500 表示该数字证书的有效期为36500天,意味着36500天之后该证书将失效
执行该命令过程会要求输入密钥口令以及其他信息,看着填就行。
2.使用jarsigner为app签名
jarsigner -verbose -keystore myApp.keystore -signedjar /Users/*****/myApp.apk /Users/*******/android-release-unsigned.apk myApp.keystore
- -verbose 表示将签名过程中的详细信息打印出来,显示在控制台窗口中
- -keystore myApp.keystore 表示签名所使用的数字证书所在位置
-signedjar (后面的路径是你要签名apk的路径)表示给Apk工程目录下的android-armv7-release-unsigned.apk文件签名,签名后的文件为该路径下的myApp.apk - myApp.keystore 表示证书的别名,对应于生成数字证书时-alias参数后面的名称
3.由于ionic cordova build android命令打包出来的apk文件已经被默认的debug.keystore文件签名过了,所以在用以上命令进行签名的时候。会报这样的错误
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 21213 but got 20064 bytes)
这是由于对一个已经签名了的apk进行签名的原因,网上的一些方法,比如改后缀名等等,我自己测试,没有生效
后来,我执行ionic cordova build android --release,对这个命令生成的apk进行签名,才可以正常签,大概是这个apk没有默认的签名吧。
4.使用zipalign工具优化已签名的apk(非必须但建议这么做)
zipalign -v 4 notsigned.apk signed.apk
说明:
- zipalign是工具名称,-v表示在DOS窗口打印出详细的优化信息;
- notsigned.apk signed.apk 表示对已签名文件notsigned.apk进行优化,优化后的文件名为signed.apk
如果命令不生效,需要cd到zipalign所在的文件夹地址,可执行一下命令
find ~/Library/Android/sdk/build-tools -name "zipalign"
然后执行./zipalign -v 4 notsigned.apk signed.apk,即可对文件进行签名,但是我对debug.apk如此操作的时候,每次签名都失败,但是对ionic cordova build android --release 生成的apk进行签名,可以签名成功,但是也不能正常安装运行。
最后,我用的3中所说的方法,签名成功了。
参考博文:https://blog.csdn.net/xqq580231/article/details/78930497