uni-app自动化构建与应用打包
uni-app持续构建介绍
文章目录
前言
uni-app简单易用,但持续集成是个问题,因为官方没有提供完整的解决方案,需要我们自行拼装。尤其让人费解的是,官方提供的cli命令工具还依赖HBuilderX这个IDE。
关键:采用uni命令行生成本地资源,然后导入到Android工程里构建即可。
基本概念
uniapp 基座、标准基座、自定义基座
基座就是原生层,js、html、css都要运行在原生层,有了基座,vue(js/html/css)才可以在真机上运行。
标准基座就是没有添加任何原生插件的基座。
项目中如果有nvue文件,那么要放到基座中,标准基座+自定义原生=自定义基座,自定义基座的最大特性就是,可以热加载。
可以将真机想象成操作系统,基座在操作系统之上,js/html/css则在基座之上,只要有nue,就要用自定义基座。
传统打包、快速安心打包
打包就是生成可以在真机上可运行的目标文件,无论IOS还是android,打包时都要用证书,证书用来对包签名,以证明这个包的身份,在具体打包时又有差异,安卓不区分开发、正式环境,可参考Android平台签名证书(.keystore)生成指南,ios区分环境,需要两套证书(开发测试环境、正式环境),可参考iOS证书(.p12)和描述文件(.mobileprovision)申请
传统打包就是云打包,将基座、代码、证书都提交到云端;注意,传统打包,超过40M时,要收费。为了省钱,我往往选择打正式包,就是调试时麻烦点,好处是省钱。
安心打包就是,只将模块配置信息提交到云端,生成原生代码包(不包含应用代码、证书信息),然后下载到本地,将应用代码添加到原生代码包中,生成未签名安装包,使用本地的证书签名生成安装包。
注意事项
Windows环境:仅Android平台支持安心打包,iOS暂不支持;MacOSX环境:Android和ios都支持安心打包。
自定义调试基座不支持安心打包
使用DCloud老版证书不支持安心打包
总体流程
和React native以及其它跨端技术一样,总体分为两步:
-
构建uni-app,将生成物放到android项目中。生成本地资源有两种方式:
- 1.选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源

- 2.通过cli命令生成本地打包App资源
- 1.选择项目 -> 发行 -> 原生App-本地打包 -> 生成本地打包App资源
-
将app资源拷贝到项目assets->apps下,目录结构如下图:

修改dcloud_control.xml中的appid为uni-app的id,确保dcloud_control.xml中的appid与manifest.json中的id与文件夹名一致,如下图所示:
-
构建android项目
CICD流程
ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。
cli
app打包-wgt包(适用于热更新)
WGT文件是WebApp的一种打包格式,全名为"Widget Installation Package"。 它是一种特殊的ZIP压缩文件格式,通常包含应用程序的相关资源,如HTML、CSS、JavaScript代码以及应用所需的图像资源、字体和其他文件。我们在打包App,以后每次更新都得去打包一次Apk,而每次上传,别人都得重新下载一次Apk,这样会很麻烦,每次用户更新都得去再次下载App。我们如果只更改了一点点东西,用户如何不需要再次下载App如果是没有太大的修改,只修改bug和部分功能我们就可以利用 wgt包进行替换。
{HBUILDERX_CLI} publish --platform APP --project {PACK_PROJECT} --type wgt
本地资源生成
package.json里添加:
"app": "cd /Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/ && cross-env UNI_INPUT_DIR=$INIT_CWD/srcaicode UNI_OUTPUT_DIR=$INIT_CWD/result UNI_PLATFORM=app-plus NODE_ENV=development node bin/uniapp-cli.js"
然后npm run app就可以了。
进到builder安装目录 ,找到UNI_OUPUT想着的配置,直接改了就行了:
也可以用下面的npm命令用npm触发编译:
"app": "cd /Applications/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/ && cross-env UNI_INPUT_DIR=$INIT_CWD/srcaicode UNI_OUTPUT_DIR=$INIT_CWD/result UNI_PLATFORM=app-plus NODE_ENV=development node bin/uniapp-cli.js"
app打包-全量包
{HBUILDERX_CLI} pack --config {CONFIG_PATH}\\app-build-{isProduction}.json
## 例如:
cli pack --config E:\\workspaces\\unicool\\production.json
json示例:
{
//项目名字或项目绝对路径-正式-建议以git文件夹命名
"project": "",
//打包平台 默认值android 值有"android","ios" 如果要打多个逗号隔开打包平台
"platform": "ios,android",
//是否使用自定义基座 默认值false true自定义基座 false自定义证书
"iscustom": false,
//打包方式是否为安心打包默认值false,true安心打包,false传统打包
"safemode": false,
//android打包参数
"android": {
//安卓包名
"packagename": "",
//安卓打包类型 默认值0 0 使用自有证书 1 使用公共证书 2 使用老版证书
"androidpacktype": "0",
//安卓使用自有证书自有打包证书参数
//安卓打包证书别名,自有证书打包填写的参数
"certalias": "",
//安卓打包证书文件路径,自有证书打包填写的参数,绝对路径,以磁盘代号开始的,不能使用相对路径./,下同
"certfile": "",
//安卓打包证书密码,自有证书打包填写的参数
"certpassword": "",
//安卓平台要打的渠道包 取值有"google","yyb","360","huawei","xiaomi","oppo","vivo",如果要打多个逗号隔开
"channels": ""
},
//ios打包参数
"ios": {
//ios appid
"bundle": "",
//ios打包支持的设备类型 默认值iPhone 值有"iPhone","iPad" 如果要打多个逗号隔开打包平台
"supporteddevice": "iPhone,iPad",
//iOS使用自定义证书打包的profile文件路径
"profile": "",
//iOS使用自定义证书打包的p12文件路径
"certfile": "",
//iOS使用自定义证书打包的证书密码
"certpassword": ""
},
//是否混淆 true混淆 false关闭
"isconfusion": false,
//开屏广告 true打开 false关闭
"splashads": false,
//悬浮红包广告true打开 false关闭
"rpads": false,
//push广告 true打开 false关闭
"pushads": false,
//加入换量联盟 true加入 false不加入
"exchange": false
}

iOS
手工下载profile后的位置:
~/Library/MobileDevice/Provisioning\ Profiles/
常见问题
android studio安装问题
需要在/etc/hosts里加入:
203.208.41.97 dl.google.com
203.208.41.97 dl-ssl.google.com
这样才能下载SDK。
导入uniapp SDK集成工程后构建报错
例如“Failed to notify dependency resolution listener.” ,这是gradle和JDK版本兼容性问题引起。可以切换到低版本的gradle试试。最后我在Ubuntu上使用JDK17+Gradle7.5.1构建成功。
修改gradle.properties:
org.gradle.jvmargs=-Xmx1536m \
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \
--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
typescript支持
- typescript支持: https://ext.dcloud.net.cn/plugin?name=compile-typescript
参考链接
更多推荐




所有评论(0)