传统方法

主要参考文献1

打包

  1. ionic cordova build android --prod --release

签名

  1. jarsigner -verbose
  2. -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1
  3. -keystore {加密文件名}
  4. -signedjar {自定义apk名称}.apk
  5. {未签名apk名称}.apk {加密文件别名}
  6. 说明:
  7. -tsajdk1.8以后需要加这个,不然安装包无法安装
  8. -verbose:指定生成详细输出。
  9. -keystore:指定数字证书的存储路径。
  10. -signedjar:该选项的三个参数分别分签名的APK包、未签名的APK包、数字证书别名。

优化

  1. zipalign -f -v 4 {优化前apk名称}.apk {优化后apk名称}.apk
  2. 说明:
  3. -f:指定强制覆盖已有文件。
  4. -v:指定生成详细输出。
  5. 4:指定档案整理所基于的字节数,通常指定为4,也就是基于32位进行整理。
  6. sipts_v1.3.3.apk,就是签名完成且经过优化的APK安装包,该安装包可以对外发布了。

总结

  • 需要打包后手动签名,比较麻烦
  • 问题较多,特别是升级或者换电脑以后可能拿不到签名成功的版本,无法安装,比如文献2列出的问题

ionic打包时自动签名(推荐!!)

主要参考文献3和4

在cordova 9.0中以下方法会失效,暂时没找到解决方法,推荐使用360加固宝手动签名[5]
image.png
在【platforms/android】路径(新项目可能没有,那就先打包,不管签名的问题,确保现有这个文件夹)下,把加密文件放进去(关于如何创建加密文件的方法,参见下面的【附】),同时新建一个名为【release-signing.properties 】的文件。
release-signing.properties的文件内容为

  1. storeFile=yourkeystore.keystore
  2. key.store.password=yourPassword
  3. key.alias=yourKeystoreAlias
  4. key.alias.password=yourPassword
  5. // storeFile 加密文件名
  6. // key.alias 加密文件别名
  7. // key.store.password 和 key.alias.password 的值是你签名时需要输入的密码

之后,再运行打包方法

ionic cordova build android --prod --release

会生成2个文件,使用第一个即可
image.png

注 该种方法生成的apk文件不能再使用zipalign优化,会签名报错(也可能是我本地jdk版本的问题-27.0.3),后面再看怎么解决。

附录

如何生成加密文件

keytool -genkey -keystore android.keystore -keyalg RSA -validity 40000 -alias android
说明:
-genkeypair:指定生成数字证书。
-alias:指定生成数字证书的别名。
-keyalg:指定生成数字证书的算法。使用RSA算法。
-validity:指定生成的数字证书的有效期。
-keystore:指定所生成的数字证书的存储路径。

会提示你升级,直接复制cmd中的提示代码,升级即可

参考文献

  1. jarsigner 命令行签名打包 - 一站到底 s 的博客 - CSDN 博客
  2. 签名 apk 包遇到的问题 - 简书
  3. IONIC APK 自动签名 - csboyty 的博客 - 51CTO 博客
  4. ionic3 自动签名打包(android) - Jason.z 视频教程
  5. —release signing not working on cordova-android 9.0.0 · Issue #1020 · apache/cordova-android