Ionic5项目android打包流程
ionic开发好应用以后,需要先进行打包、签名、优化,才能在各大应用商店中进行发布,本文就apk的打包、签名、优化操作进行介绍。
1、apk打包
1.1 请先下载Android SDK,并配置环境变量ANDROID_HOME
1.2 在ionic项目根目录下通过指令添加android平台,具体如下:
ionic cordova platform add android
1.3 修改项目配置文件config.xml
主要修改的项:
widget 元素的id属性值和version属性的值
注:version 的值每次打包都需要修改一下
name、description、author等,具体如下:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.wongoing.mes" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MES</name>
<description>移动端MES</description>
<author email="zhenglibingaccp@126.com" href="http://www.coding123.cn/">郑立兵</author>
<content src="index.html" />
</widget>
1.4 已release方式打包项目,在项目根目录下执行如下命令:
ionic cordova build android --release
执行完毕后会生成未签名的apk文件app-release-unsigned.apk,如下图:
2、生成jks(Java Key Store)文件
2.1 前提条件是安装了JDK,并配置了环境变量(JAVA_HOME、PATH)
2.2 生成jks文件(Java Key Store)
在ionic项目根目录下执行以下命令:
keytool -genkey -v -keystore ’填你生成 的签名文件名称‘.jks -keyalg RSA -keysize 2048 -validity 10000 -alias ’填代称‘
具体执行如下:
keytool -genkey -v -keystore com.wongoing.mes.jks -keyalg RSA -keysize 2048 -validity 10000 -alias mes
会提示输入密钥库口令等信息,如下
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[郑]: 郑立兵
您的组织单位名称是什么?
[弯弓信息]: xxx
您的组织名称是什么?
[数据服务]: 数据服务
您所在的城市或区域名称是什么?
[青岛]: 青岛市
您所在的省/市/自治区名称是什么?
[山东省]:
该单位的双字母国家/地区代码是什么?
[ZH]: zh-CN
CN=郑立兵, OU=xxx, O=数据服务, L=青岛市, ST=山东省, C=zh-CN是否正确?
[否]: Y
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000 天):
CN=郑立兵, OU=xxx, O=数据服务, L=青岛市, ST=山东省, C=zh-CN
输入 <mes> 的密钥口令
(如果和密钥库口令相同, 按回车):
[正在存储com.wongoing.mes.jks]
这是在项目根目录下就生成了xxx.jks文件了,这些信息你需要记住,其中-alias mes别名每次执行都不能相同。
3、生成签名的apk文件
3.1 创建一个工作目录,d:\android-apk
3.2 把之前生成的app-release-unsigned.apk文件和com.wongoing.mes.jks文件复制到此目录下
3.3 打开cmd或Windows Powershell,然后定位当前目录至工作目录下d:\android-apk
3.4 执行签名命令
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 [-tsa ‘时间戳生成地址’] -keystore ’填你签名文件名称‘.jks app-release-unsigned.apk ’填代称‘
进行签名,这样就会生成一个 已签名的包。具体命令案例如下:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -tsa http://timestamp.comodoca.com/authenticode -keystore com.wongoing.mes.jks app-release-unsigned.apk mes
如果时间戳网站不可用请更换,常用免费时间戳网址
- http://time.certum.pl/
- http://sha256timestamp.ws.symantec.com/sha256
- http://timestamp.comodoca.com/rfc3161
- http://tsa.wosign.com/timestamp
- http://tsa.starfieldtech.com
- http://timestamp.globalsign.com/scripts/timstamp.dll
- http://rfc3161timestamp.globalsign.com/advanced
- http://timestamp.digicert.com
- http://timestamp.verisign.com/scripts/timestamp.dll
- http://timestamp.entrust.net/TSS/AuthenticodeTS
[-tsa]部分可选,但是如果不写-tsa部分,会导致签名文件报警:警告: 未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。这样会导致部分手机无法安装,因此还是建议加上-tsa参数。
什么是时间戳?
时间戳(mestamp)是指在一我们签好名的代码中加入辨识文字,如时间或日期,用以保障本地端资料更新顺序与远端服务器端一致。
时间戳在代码签名证书中的应用
VeriSign 或 Thawte代码签名证书可支持一到三年有效期。一般我们开发的软件的生命周期都会更长,为了保证用数字证书签名后的软件代码在证书到期后仍然有效,我们就必须使用时间戳技术。当我们对代码进行数字签名时,将会产生希哈值发送给时间戳服务器进行时间戳反签名。这样,当用户下载签名代码后,IE等网络浏览器将进行鉴别: (a) 如果是代码签名证书已经过期,用该证书签名的软件代码将不会被信任;(b) 用有效的代码签名证书签名的代码,即使代码签名证书已经到期,但代码仍然是可信的。维瑞代理VeriSign、Thawte代码签名证书免费为客户提供时间戳服务,是为了方便软件开发商可以不用担心由于代码签名证书过期而影响在有效期内已经签名的代码的正常的使用,也就是说,在代码签名证书有效期内签名的代码使用时间戳后永远不会过期。
免费时间戳URL
目前列出的时间戳服务都在国外;在添加时间戳的时候,要确保的你的网络能访问国外,否则会签名不成功。Verisign 时间戳URL: http://timestamp.verisign.com/scripts/timstamp.dll Comodo 时间戳URL: http://timestamp.comodoca.com/authenticode GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp
4、apk文件优化与重命名
执行完上面的操作后,d:\android-apk\app-release-unsigned.apk文件已经是签名过的文件了。
Android SDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。因此,这种方式能够让应用程序和整个系统运行得更快。我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本。
在工作目录下执行以下命令
android-sdk目录\build-tools\版本\zipalign -v 4 app-release-unsigned.apk ’填写你优化后的包的名称加.apk‘
对apk文件进行优化和重命名,具体案例如下:
工作目录为d:\android-apk
D:\android-sdk-windows\build-tools\29.0.3\zipalign -v 4 app-release-unsigned.apk com.wongoing.mes.apk
执行完毕后会在工作目录下就会出现一个新的apk文件:com.wongoing.mes.apk
这样就可以在手机上安装com.wongoing.mes.apk了也可以把com.wongoing.mes.apk发布到各大渠道平台的应用商店上了。