一、分包规则支持的属性
属性 | 类型 | 含义 | 描述 |
name | String | 分包名称 | 名称可以用在分包API中。 |
root | String | 资源目录 | 资源目录,编译时会把目录下的所有资源都打到这个分包中去。 |
下面是一个分包规则示例,位于工程的 manifest.json 文件:
{
"package": "com.minigame.demo", 快游戏包名
"name": "mini game", 快游戏名称
"icon": "/image/logo.png", 快游戏icon
"versionName": "1.0.0", 快游戏版本
"versionCode": 1, 快游戏版本号,int 类型
"minPlatformVersion": 1076, 最小支持版本,int 类型
"orientation": "portrait", 不填或默认值为portrait,对快应用无效。取值为portrait或landscape
"type": "game", 不填或默认值为app,取值为app或game
"config"": {
"logLevel": "log" logLevel取值off,error,warn,info,log,debug,trace
},
subpackages: [ 分包配置
{
"name": "sub1Name", 子包名称
"root": "sub1/" 可以指定一个目录,目录根目录下的 main.js 会作为入口文件
},
{
"name": "sub2Name", 子包名称
"root": "sub2.js" 也可以指定一个 JS 文件
}
]
}
二、源码组织
├── sign rpk包签名模块
│ └── debug 调试环境
│ ├── certificate.pem 证书文件
│ └── private.pem 私钥文件
│ └── release 线上环境
│ ├── certificate.pem 证书文件
│ └── private.pem 私钥文件
├── logo.png 游戏图标(非必须)
├── sub1 子包目录(非必须)
│ └── main.js 子包入口js
├── sub2.js 子包js(非必须)
├── main.js 游戏入口js
└── manifest.json 项目配置文件,配置游戏图标、包名等
三、hap-toolkit分包输出结构
com.application.quickgame.rpk 整体压缩包(包名+.rpk)
--->com.application.quickgame.rpk 原整包(包名+.rpk)
--->main.rpk 分包主包(main+.rpk)
--->sub1Name.rpk sub1分包(子包名+.rpk)
--->sub2Name.rpk sub2分包(子包名+.rpk)
四、应用大小限制
- 整个小游戏的所有分包总和不超过 10M;
- 单个分包/基础包大小不能超过 5M;
- 整体压缩包(包含原整包和所有分包;)不超过20M。
com.application.quickgame.rpk 整体压缩包(包名+.rpk) (最大20M)
--->com.application.quickgame.rpk 原整包(包名+.rpk) (最大10M)
--->main.rpk 分包主包(main+.rpk) (主包,最大5M)
--->sub1Name.rpk sub1分包(子包名+.rpk) (单个分包,最大5M)
--->sub2Name.rpk sub2分包(子包名+.rpk)(单个分包,最大5M)
五、分包加载API
LoadSubpackageTask qg.loadSubpackage(Object object)
加载游戏子包。注意:主包或子包不能引用未加载的包中的模块。
参数Object object
属性 | 类型 | 必填 | 说明 |
name | String | 是 | 分包的名字,需要和分包配置中的值对应,可以是name或者root |
success | Function | 否 | 接口调用成功的回调函 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(无论成功失败都会执行) |
LoadSubpackageTask.onProgressUpdate(Function callback)
用于获取分包加载状态
callback回调函数的参数Object res
属性 | 键值类型 | 说明 |
progress | Number | 分包下载进度百分比 |
totalBytesWritten | Number | 已经下载的数据长度,单位 Bytes |
totalBytesExpectedToWrite | Number | 预期需要下载的数据总长度,单位 Bytes |
六、代码示例
const loadTaskA = qg.loadSubpackage({
name: 'sub1Name',
success: function(data) {
console.info('加载分包 sub1Name 成功')
},
fail: function(err) {
console.info('加载分包 sub1Name 失败', err)
}
})
loadTaskA.onProgressUpdate(res => {
console.log('sub1Name 下载进度', res.progress)
console.log('sub1Name 已经下载的数据长度', res.totalBytesWritten)
console.log('sub1Name 预期需要下载的数据总长度', res.totalBytesExpectedToWrite)
})
七、最低兼容框架版本号
小游戏打包时需填写“最低兼容框架版本号”,现阶段建议填写1076
八、小游戏编译工具使用说明
https://dev.mi.com/xiaomihyperos/documentation/detail?pId=1110