转载自https://www.cnblogs.com/a418120186/p/5475621.html
1.为何要APK要签名
首先是关于apk签名,Android程序的安装是以包名(package name)进行区分的,就是同样的包名会被认作是同一个程序。这样就可以进行升级、替换。但是包名是一个可以被查看的字符串,这样就可能被伪造,然后其他人就可以自己创建一个应用去替代你的应用,结果可想而知。而签名就是为了防止这样的情况发生,当你的程序被签名后安装,只有同样包名与签名的程序才能被替换安装。而签名是不可能简单被伪造的,从而保证了程序的安全性。
一、使用命令行打包签名apk
- 打包Apk
cordova bulid android //用于测试的打包方式,生成已签名apk
cordova build --release android //生成没有签名的apk
第一个命令可以随意发送安装,但是他不能上架。因为只有在绝对同样的环境下进行打包,才能保证这个apk的签名相同,意味着你这台机器必须始终保持正常并且系统和打包工具等不作修改。这明显是不合理的。所以,我们必须采用生产的方式打包,就是第二个命令,这个命令生成的是一个无签名的apk,他无法安装在手机上,必须进行签名。
- 生成签名文件
keytool -genkey -v -keystore demo.keystore -alias demo.keystore -keyalg RSA -validity 20000
keytool是工具名称; -genkey意味着执行的是生成数字证书操作; -v表示将生成证书的详细信息打印出来;
-keystore demo.keystore 表示证书的文件名(自己命名); -alias demo.keystore 表示证书的别名(自己命名);
-keyalg RSA 生成密钥文件所采用的算法; -validity 20000 该数字证书的有效期,单位是天;
输入后会让你输入密码,并回答一些关于你公司和地区的问题,回答完后截屏记录,防止忘记。
- 为apk签名
jarsigner -verbose -keystore /yourpath/demo.keystore -signedjar
/yourpath/demo_signed.apk /yourpath/demo.apk /yourpath/demo.keystore
jarsigner是工具名称,
-verbose表示将签名过程中的详细信息打印出来;
/yourpath/ (根据自己的情况配置)相对于当前命令行所在文件夹的位置,可将下列文件放在同一目录下;
-keystore /yourpath/demo.keystore 刚刚生成的签名文件(上一步骤中的-keystrore的文件名);
-signedjar /yourpath/demo_signed.apk 签名后的apk名称
/yourpath/demo.apk 需要签名的apk
/yourpath/demo.keystore 证书的别名(上一步骤中的-alias别名)。
总结一下就是:这个命令中需要传入证书名 ,要签名的 APK ,和证书别名 。签名过程中需要先后输入 keystore 和 key 的密码。命令运行完后,这个 APK 就已经改变了。注意这个过程没有生成新文件。
- 压缩(可不做)
最后我们要用 zipalign
压缩和优化 APK :
zipalign -v 4 android-apk/android-release-unsigned.apk android-apk/cordova-demo.apk
这一步会生成最终的 APK,我们把它命名为 cordova-demo.apk
。它就是可以直接上传到应用商店的版本。
这一步不操作也可以。