打包分包工具流程记录

流程记录:

开始打包AB

1. 收集需要打包的资源路径

收集资源逻辑抽离出来做成Mgr,收集的资源用字典存取,键值为资源路径。(用IO流的DirectoryInfo.GetFileSystemInfos() 和FileInfonfo获取完整目录(这种方法要注意:获取到的目录如果是”\”或者”//”要替换为“/”))
在这里插入图片描述
收集资源时,会根据以上说明配置在Assets\Resources\Config\AbEditorConfig 此目录下读取对应名称的文本文档,例如

在这里插入图片描述
此配置目录是忽略资源目录,在这之下的资源都不会进行收集打包。

在这里插入图片描述
此目录下的的资源所依赖的所有其他资源打包时都会进行缓存,避免重复打包操作。

先收集Asset/Scenes目录下的所有文件,递归遍历所有子目录,返回所有需要打包的资源路径列表。之后收集Resources,之后一起存储在收集资源Mgr中,存储的过程中进行一次筛选,

在这里插入图片描述是否是脚本,是否是忽略文件类型,是否是shader,shader文件统一用一个AB名称,统一打成一整个AB,方便频繁调用引用。

之后收集下Unity自带设置的AssetBundle。收集完这些之后,开始进行合并操作,第一步主要是对Unity设置的AB资源进行去重,第二部将Unity设置的AB所有的依赖资源、以及之前收集的资源路径所依赖的资源进行合并,

在这里插入图片描述

以上算是将所有需要打包的资源路径都收集完毕。

2. 导出AB资源

在这里插入图片描述
将收集好的资源路径转换成AssetBundleBuild,获取资源文件的哈希值,打包到相应的AB目录。分成两个目录,一个目录存档需要压缩的ab,一个目录存放无需压缩的ab。需要压缩的ab,主要是场景,shader,比较通用的大型ab资源。

之后计算出AB的md5,并将这些信息写入到目录索引结构中去。

以下为ab资源的索引结构,

Ab资源的根索引结构
{“list”:[{“path”:“assets_resources_config_platforminfo.bytes.ab”,“md5_ex”:“a09fe92520e9e4d1f607384831c13c82”,“size”:1947,“md5”:“16d668acdf6d31531f0fdcbf7538a199”,“crc”:2476629122},
{“path”:“assets_resources_config_resbin_carnivalsubtaskconfig.bytes.ab”,“md5_ex”:“6aa66d8eab7c3b74f49575e54df42f0b”,“size”:2363,“md5”:“aa8d06da54959fd6a43d23f00bc4d2c4”,“crc”:4005958029}
在这里插入图片描述

3. 导出工程所有用到的dll

导出打包平台的原生工程。

在这里插入图片描述
拷贝源工程中的代码到专门分包的目录下的base工程中去。

再讲源工程中的DLL复制过去,之后用 http://stahlworks.com/dev/?tool=zipunzip 这个工具进行一次压缩和加密。

4. 压缩AB

通过原本的索引目录结构读取出ab的md5,利用md5筛选掉不需要压缩的ab资源,通过7z.exe 工具进行压缩。压缩完之后还是以原本的ab名称替代。

5. 将打包好的AB资源拷贝到分包工程目录中去

在这里插入图片描述

开始出包分包

利用C#开发的窗体应用,进行渠道选择,分包操作。工具UI窗体如下图:

在这里插入图片描述
左边是选择渠道,右边是配置。

在这里插入图片描述
首先初始化路径,点击生成开始分包。

具体分包流程如下

  1. 先将母工程拷贝到一个临时目录下。
  2. 再将渠道资源配置读取出来
  3. 将渠道的相关配置文件拷贝到临时目录下,如果临时工程中有文件名后缀为Xml的文件,则进行合并。

在这里插入图片描述合并操作:递归遍历,传入两个父节点,先遍历源xml的子节点,从目标xml的子节点中找到相同name的节点。
需要注意的是在查找相同name的时候,如果name为intent-filter时需要特殊处理下,再找 intent-filter 下子节点中name为Action的节点并且属性名为“name”的属性值,如果属性值相同的则返回。
如果没找到相同节点,则在目标xml中新增一个元素,相当于复制。
如果找到相同节点,对比属性是否有缺失。在这里插入图片描述

  • 先将Common下的配置合并一次。
  • 如果依赖渠道不为空,则还需要将依赖渠道再走一次合并逻辑。
  • 最后再将选中的目标渠道合并一次。
  1. 开始设置签名信息,将工具中配置好的签名路径和密码读取出来,在写入到临时工程中的 build.gradle中,加入到 signingConfigs 标签中。
  2. 检查AndroidSdk是否配置,并生成local.properties
  3. 执行gradle clean命令
  4. 执行 gradle assembleRelease 开始打包。
  5. 检查下临时工程下是否正常打出release apk,将Manifest 中配置的包名读取出来,将apk重命名。
  6. 最后将APK 拷贝到输入 目录即可。

以上就是全部打包分包流程的记录了,用作记录和复习。

猜你喜欢

转载自blog.csdn.net/a525324105/article/details/123105730
今日推荐