参考官方文档

生成密钥(证书)文件

keytool -genkey -v -keystore release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

说明:

keytool

是一个工具命令

-v 

指的是将生成证书的详细信息打印到终端

-genkey

表示生成key

-keystore release-key.keystore

指定生成的密钥文件名,release-key.keystore就是指定的文件名,.keystore是证书的扩展名

-alias alias_name

别名,这里指定别名为alias_name

-keyalg RSA

生成密钥文件所用的算法,这里为RSA 

-validity 10000

该密钥的有效天数

-keysize 2048

指定2048位的密钥

执行上述命令后,会在当前目录下生成一个release-key.keystore文件,如果当前目录下已有同名文件,则执行命令时会报密码错误(密码与之前创建这个密钥文件的密码不同时)

过程中会要求设置keystore密码和key密码。(这个文件只需生成一次)

 

 生成的这个证书文件及密码一定要保存好,丢了的话,后面修改App后,再发布,已安装了旧版APP的用户就不能直接升级了,只能重新安装。

查看证书信息

keytool -list -v -keystore release-key.keystore

然后输入口令,会显示此密钥文件中的相关信息,包括SHA1等

打生产包

ionic cordova build android --release

成功的话会在以下位置生成apk文件

ionic3(项目目录/platforms/android/build/outputs/apk/android-release-unsigned.apk)
ionic4(项目目录platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk)

 

绑定密钥(证书)文件

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.keystore apk/android-release-unsigned.apk alias_name

 

 

 

 

说明:

jarsigner

 工具名称

-verbose

 指的是将生成证书的详细信息打印出来,显示在dos窗口

 -keystore release-key.keystore 

 意思是签名所使用的数字证书的位置,没有写路径则表示在当前目录下

 apk/android-release-unsigned.apk

 意思是apk所在的文件位置,注意apk的/符号指的是在名字为apk这个文件的里面,如果不指定目录默认为当前目录

cordova-demo

 指的是在生成签名的时候使用的别名

 -sigalg与-digestalg

 密钥格式

 

 

 

命令完成后这个APK就已经改变

如果出现以下报错
java.util.zip.ZipException: invalid entry compressed size (expected 13283 but got 12029 bytes)

可以尝试在命令中加 -signedjar myname-singed.apk

意思就是绑定签名后生成一个新的APK文件,后面myname-singed.apk是自己起的文件名。

 

打包签名注意事项:

打debug包时计算机会默认生成一个签名自动绑定debug包,所以debug包不可以再加手动签名,会导致冲突,但是不同的机器上面打出来的debug包生成的签名都会不同,无法覆盖安装,
打release包时需要手动创建签名文件,随后将release包与签名绑定。没有签名文件的release包安装时会提示没有安全证书,无法安装apk包。在不同机器上打出来的release包只要是绑定的签名文件一致,就可以实现覆盖安装

 

Align压缩优化

zipalign-v 4原apk文件 压缩后apk文件,例:

zipalign -v 4 android-release-unsigned.apk MyExrApp.apk

 

 

 

.