接入指南 API 工具 其他

快游戏分包

包体说明

rpk 包体可通过 zip 解压查看

包体类型包体大小备注
普通包包体<4MB打包后 rpk 只有一个包体
分包快游戏:主包<4mb + 所有分包<30MB打包后 rpk 包含:主包+分包+兼容整包(开平上传时不计算该包体)

分包说明

分包加载,即把游戏内容按一定规则拆分为几个包,在首次启动时先下载必要的包,这个必要的包我们称为「主包」,开发者可以在主包内触发其它分包的下载,从而把首次启动的下载耗时分散到游戏运行中。

  • 分包名称不要使用 main,这个是主包固定使用的名称
  • 无网备案:分包不算网络加载,可以通过无网备案测试,若包体较大,可向平台申请开放白名单,需要考虑到启动转化效果,建议将后置资源通过网络下载,前置资源放在分包,可以通过无网审核即可。
<分包打包后的RPK包含:兼容整包+主包+分包>
com.application.demo.rpk整体压缩包(包名+.rpk)
------------- com.application.demo.rpk 原整包(包名+.rpk) (兼容老版本引擎的原整包=分包主包+分包A+分包B)
------------- main.rpk 分包主包(main+.rpk) (4M)
------------- pkgA.rpk pkgA分包(子包名+.rpk) (A+B 16M)
------------- pkgB.rpk pkgB分包(子包名+.rpk)

分包配置

需要先在 manifest.json 中配置分包信息。假设快游戏的 src 目录结构如下

├── game.js
 ├── manifest.json
 ├── images
 │   ├── a.png
 │   ├── b.png
 ├── package1
 │   └── game.js
 │   └── images
 │       ├── 1.png
 │       ├── 2.png
 └── package2.js

manifest.json 配置

{
  "package": "",
  "name": "",
  "icon": "/image/logo.png",
  "versionName": "",
  "versionCode": "",
  "minPlatformVersion": "",
  "orientation": "",                   //支持的屏幕方向:portrait 为竖屏,landscape 为横屏
  "type": "game",
  "allianceVersion": "1300",              //默认版本号1300((此字段是联盟包体的关键标识))
  "config": {
    "logLevel": "debug",              //取值为 off,error,warn,info,log,trace,debug"
    "debug": false                    //取值 debug 开关(true,false)
  },
  "subpackages": [
    {
      "name": "package1",
      "root": "package1/"             // mainifest入口:主包和分包都可以是main.js 或 game.js各家作兼容处理, 优先解析main.js
    }, {
      "name": "package2",
      // !!! 注意文件名称只允许出现一个点,不要写成这种 package2.min.js 可能会造成报错
      "root": "package2.js" // 也可以指定一个 JS 文件
    }
  ]
}

配置在 subpackages 字段内的目录或 js 文件,将按照配置打包成一个个「分包」,没有配置在 subpackages 中的目录和 js,需要开发者 require,进而打包到「主包」中

require 路径标准:

  • 主包:相对路径 > 基于 rpk 目录
  • 分包:相对路径 > 基于分包目录 > 基于 rpk 目录
  • 主分包之间不隔离,可以互相 require
  • require 同一个文件只会执行一次

为了方便开发,目前 cocos,laya,egret 这三家的 IDE 可以直接导出分包配置,只需要升级到对应版本 cocos>=2.1.3,laya>=2.3.0,Egret Launcher>=1.0.69,Unity 使用最新插件

运行时加载分包

我们提供了 qg.loadSubpackage()API 来触发分包的加载,调用 qg.loadSubpackage()在加载完成后,通过 qg.loadSubpackage()的成功回调来通知加载完成。 同时,qg.loadSubpackage()会返回一个 LoadSubpackageTask ,可以通过 LoadSubpackageTask 获取当前下载进度。 示例代码:

const loadTask = qg.loadSubpackage({
  name: "package1",
  success: function(info) {
    // 分包加载成功后通过 success 回调
  },
  fail: function(info) {
    // 分包加载失败通过 fail 回调
  },
  complete: function() {
    // 不关分包加载成功还是失败都会执行此回调
  }
});

loadTask.onProgressUpdate(res => {
  console.log("下载进度", res.progress);
  console.log("已经下载的数据长度", res.totalBytesWritten);
  console.log("预期需要下载的数据总长度", res.totalBytesExpectedToWrite);
});

条匹配 "" 的结果

    没有搜索到与 "" 相关的内容