Cordova移动应用的打包、签名与发布
Apache Cordova是Apache基金会支持的一套开源移动APP底层编译工具,可以与任何前端框架结合,完成基于H5的跨平台移动开发编译。
所开发的移动应用可通过添加不同的编译平台(platform),实现同一套代码面向Android、ios,以及华为鸿蒙等不同手机系统的部署和运行,因而具有良好的灵活性、移植性和通用性。
那么,开发完成后的Cordova工程,应该如何完成打包、签名和向应用市场的发布呢?
需要三个步骤:
1、生成aab文件;
2、对aab文件签名;
3、发布到google play
以下将详细描述上述步骤。
1、制作带图标和启动画面的app发布版本
(1)制作图标和APP启动画面
首先制作app安装到手机的图标和启动画面,需要根据手机屏幕的不同型号大小制作不同尺寸的图片(一般为png格式),并放入工程目录的res目录下。例如:
制作不同大小的图片存入:
注:
- android的screen最新可支持xml或png两种文件方式
- android在Cordova-Android 8.0.0以后支持自适应图标,Cordova-Android 12.0.0 以后支持主题图标
- 关于更多cordova的icon的自定义可参考官网:
https://cordova.apache.org/docs/en/latest/config_ref/images.html
(2)在app中配置
工程中加入如下插件:
cordova plugin add cordova-plugin-splashscreen
打开工程目录下的config.xml,在末尾加入如下语句,并保存:
<preference name="AutoHideSplashScreen" value="true" />
<preference name="SplashScreenDelay" value="3000" />
<preference name="ShowSplashScreenSpinner" value="true" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="AndroidWindowSplashScreenBackground" value="#fffacd" />
<platform name="android">
<icon src="res/icon/android/myicon.png" />
<!-- <splash src="res/screen/android/myscreen.png" /> 该方式已弃用-->
<preference name="AndroidWindowSplashScreenAnimatedIcon" value="res/screen/android/myscreen.png" />
</platform>
<platform name="ios">
<icon height="128" src="res/icon/ios/myscreen.png" width="128" />
</platform>
注:关于更多cordova的config.xml的定义可参考官网:
https://cordova.apache.org/docs/en/latest/config_ref/index.html
(3)打包生成发布的版本
- 注:以myApp工程制作面向Android的应用为例说明。
cordova工程的编译命令cordova build的命令参数如下:
采用不同的编译参数,可产生debug和release两个版本的结果。
- debug版本:用于调试
- release版本 :用于发布
注意:2021年8月起,google要求google play应用都以aab文件方式上传! 因此,采用上述build --release生成的版本已保存为aab文件,而不是apk文件!!!
生成的aab文件将保存于:
所建工程目录\platforms\android\app\build\outputs\bundle\release
例如,执行如下命令生成最终的release版本:
生成的aab文件的位置:
2、对应用程序签名
(1)生成keystore数字签名文件
用以下命令生成签名文件,其中release-key.keystore是自己命名的签名文件名:
keytool -genkey -v -keystore release-key.keystore -alias cordova-demo -keyalg RSA -keysize 2048 -validity 10000
其参数含义:
据说有效期最好在25年之内,否则审核可能不通过,因此,也可以设为9000天!
更详细的可用help查看:
keytool -help
生成中,按提问回答签名信息,并记住所设置的密钥库口令(至少6个字符)。
完成后,对于老版本运行,会出现如下提示:
按提示完成迁移后,在当前目录中即生成了包含所设置信息的release-key.keystore签名文件。
(2)用签名文件为aab文件签名
- 为避免命令过长,可以先将签名文件和待签名的文件拷贝到一个目录(例如:都放在platforms\android\app\build\outputs\bundle\release目录)
- 然后,用以下命令为aab文件签名,并生成app-release-signed.aab文件。(注意是一行):
jarsigner -verbose -keystore release-key.keystore -signedjar app-release-signed.aab app-release.aab cordova-demo
签名结果:
3、发布应用程序
发布方式包括:
- (1)将aab文件和签名文件按google play的要求,发布到google play
- (2)转换为apk文件提供给使用者
注:Google采用的是aab文件发布,与apk的区别是:不再需要打包所有类型安卓设备的全部内容,开发者只需要根据需求上传更新,Google Play 会按照需要加载内容并完成优化和分发!
4、转换aab为apk再发布的方法
aab文件可以更快速、灵活地发布到Google play,但是如果需要将aab文件转换为apk文件的话,可以按如下方法:
(1)aab转为apk的方法
- 首先,下载bundletool.jar
下载网址:https://github.com/google/bundletool/releases - 然后,将下载的jar文件和需要转换的aab文件放在一起(或者放到java运行目录),再用下述命令将aab转换生成apks
java -jar bundletool.jar build-apks --bundle=app-release-signed.aab --output=output.apks --ks=你的keystore文件名 --ks-key-alias=你的keystore别名 --ks-pass=pass:你的keystore密码 --key-pass=pass:你的key密码 --mode=universal
上面app-release-signed.aab是待转换的aab文件,转换后的文件名是:output.apks
如果在生成签名文件时,没有单独设置key密码,则和keystore密码一致。
运行后,生成了apks文件:
然后可以用unzip对该apks解压得到universal.apk,然后安装到设备。
例如:
unzip output.apks -d /path/to/extracted/
adb install /path/to/extracted/universal.apk
(2)优化apk文件
对于转换后的apk文件,之前已对aab签过名,不再需要对apk签名。
但可以用android提供的build tool工具zipalign进行优化,方法如下:
命令:
zipalign -v 4 app-release-signed.apk app-release-signed-aligned.apk
更多关于bundletool的说明详见:https://developer.android.com/tools/bundletool?hl=zh-cn