打包分包工具流程记录
流程记录:
开始打包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资源的索引结构,
{“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窗体如下图:
左边是选择渠道,右边是配置。
首先初始化路径,点击生成开始分包。
具体分包流程如下
- 先将母工程拷贝到一个临时目录下。
- 再将渠道资源配置读取出来
- 将渠道的相关配置文件拷贝到临时目录下,如果临时工程中有文件名后缀为Xml的文件,则进行合并。
合并操作:递归遍历,传入两个父节点,先遍历源xml的子节点,从目标xml的子节点中找到相同name的节点。
需要注意的是在查找相同name的时候,如果name为intent-filter时需要特殊处理下,再找 intent-filter 下子节点中name为Action的节点并且属性名为“name”的属性值,如果属性值相同的则返回。
如果没找到相同节点,则在目标xml中新增一个元素,相当于复制。
如果找到相同节点,对比属性是否有缺失。
- 先将Common下的配置合并一次。
- 如果依赖渠道不为空,则还需要将依赖渠道再走一次合并逻辑。
- 最后再将选中的目标渠道合并一次。
- 开始设置签名信息,将工具中配置好的签名路径和密码读取出来,在写入到临时工程中的 build.gradle中,加入到 signingConfigs 标签中。
- 检查AndroidSdk是否配置,并生成local.properties
- 执行gradle clean命令
- 执行 gradle assembleRelease 开始打包。
- 检查下临时工程下是否正常打出release apk,将Manifest 中配置的包名读取出来,将apk重命名。
- 最后将APK 拷贝到输入 目录即可。
以上就是全部打包分包流程的记录了,用作记录和复习。
打包分包工具流程记录相关推荐
- 服务器打包文件工具,项目增量发版之全自动打包流程(patch-generator-desk打包软件)...
在我们程序员工作中往往伴随着频繁加班/通宵发版的过程中,对于小型项目或是只有当台服务器部署的这些项目,我们仅仅用代码全量发布,将开发工具工作空间的项目下的目录挨个用ftp或者其它工具上传替换就行.但是 ...
- Android APK文件结构 完整打包编译的流程 APK安装过程 详解
Android apk文件结构 打包编译的流程 Android官网 配置构建 流程 Configure your build The build process APK文件结构 assets res ...
- android监听通知消息 脚本,Bash玩转脚本4之搞一套完整的Android反编译与分包工具...
一.前言 正在搞IOS的微信支付和支付宝支付,焦头烂额之时,天上掉下来一个Android分包工具的需求,觉得还蛮有意思,其实之前一直想搞一个类似的东西,正好趁着这次机会实践一下. (先说清楚需求,这个 ...
- Mac开发-公证流程记录Notarization-附带脚本
文章目录 公证 打开App的几种提示 App的配置 Xcode公证流程 Xcode操作 确保你的App公证成功 观看上传日志 脚本公证 打包并导出 ExportPlist文件设置 压缩文件 1.zip ...
- python 查看当前目录_「Python」打包分发工具setuptools学习
❝ setuptools是python标准的打包分发工具,它可以将我们编写的python项目打包安装,这样其他同事就可以像调用标准库或python第三方库那样直接使用:也可以将项目上传到Pypi供更多 ...
- 一般情况下UniApp打包上线APP流程
UniApp 看官方展示现可以实现一套代码发布10个平台. 小程序端打包流程都很简单. 小编主要用来发布Android版,iOS版. Android版通过 "云端APP打包" 生成 ...
- HTML一键打包APK工具_安卓app封装_H5打包安卓APP
随着目前苹果Appstore审核越来越严格,每天平均上架1000个,下架3000个应用,想要上架苹果应用商店已经越来越困难了,反复修改审核上架,短则1-2周,长则几个月,并且游戏类应用上架目前极其困难 ...
- python生成exe工具流程【离线】
项目背景: 公司使用内部局域网台式机[离线],因此只能通过虚拟机查阅资料下载所需的支持类库.python生成exe工具通常使用pyinstaller工具打包py文件和对应支持的类库.如果直接打包系统当 ...
- 批量大文本筛选过滤工具开发记录
批量大文本筛选过滤工具开发记录 本周花了两三天的时间做了一个大文本数据筛选工具,主要是针对excel打开很慢或者无法打开的几百兆乃至几G的csv.txt文件,提供常规的数据筛选.统计和输出功能.这个大 ...
最新文章
- Colored Sticks--POJ 2513
- JAXB,SAX,DOM性能
- Java之美[从菜鸟到高手演变]之设计模式四
- 【源码】VB6聊天机器人
- html乱码原因与网页乱码解决方法
- 阿里云服务器学生计划--免费领取两个月
- qcloud php开发,GitHub - QcloudApi/qcloudapi-sdk-php
- 转基因,请你走出这片净土。!!!食用转基因的人,你们伤不起~有木有,有木有啊~!!!!!!!!!!!!!!!
- 英雄联盟7月23日维修服务器,英雄联盟7月23日更新维护到几点结束 7月23日lol10.15版本更新维护结束时间...
- 为何日本手机走不出国门?
- 关于termux在手机上搭载Linux系统,python,ssh
- “Hacker_R_US”因炸弹威胁和DDoS勒索被判8年监禁
- DT内核圆柱模板行业站点主动tags三项主动推送插件
- BIOS知识枝桠——Event
- 蚂蚁金服Java暑期面试
- 豆瓣电影多个作品里的海报、剧照图片怎样快速复制保存
- 把中兴通讯称为猪队友,你就高兴了吗?
- Android 打包32位和64位兼容包
- 2021年中国智能仓储行业情况分析:电商快速发展,促进智能物流及仓储快速发展[图]
- mysql查询前5000条记录分页显示_数据库 完整的查询语句,查询顺序及分页显示功能...
热门文章
- c语言中aver是什么意思_嵌入式C语言基础编程—5年程序员给你讲函数,你真的懂函数吗?...
- 2022年全球及中国防晒霜功效测试行业头部企业市场占有率及排名调研报告
- java对象数组的初始化 看完我悟了
- Java中的对象数组
- Java中表头的边框置为实线,div的边框线为实线怎么样设置
- js将数字转换成字母
- html制作花样链接卡,挂钩弹片连接式手机壳的制作方法
- 视频文件损坏无需再苦恼!快速修复方法分享!
- 【JAVA】-- 多线程Thread类的常用方法
- 弹球游戏java怎么设置分数_Java弹球游戏的基本实现(一)