ue4 项目打包流程设计,以及增量更新,客户端更新程序设计。

基本流程(可以简单通过颜色一致的来快速定位相关逻辑)

基本流程
流程图:
在这里插入图片描述


1.创建基础发布包(BaseReleaseVersion)

Parsing command line: -ScriptsForProject=D:\jenkins\workspace\IterativePackage\你的项目.uproject BuildCookRun -project=D:\jenkins\workspace\IterativePackage\你的项目.uproject -noP4 -clientconfig=Development -nocompile -installed -utf8output -targetplatform=Win64 -build -cook -pak -createreleaseversion=71 -createreleaseversionroot=E:\IterativePackage\4.0.2.71 -manifests -compressed -stage -package -archive -archivedirectory=E:\IterativePackage\4.0.2.71\BaseRelease

通过-pak 创建pak包
-createreleaseversionroot =E:\IterativePackage\4.0.2.71 存放4.0.2.71以及基于该版本的所有子版本存放根目录
-createreleaseversion=71 创建版本号,他会在createreleaseversionroot下,再创建一个“71”的文件夹,来存放pak信息(E:\IterativePackage\4.0.2.71\71\…)
通过-archivedirectory=E:\IterativePackage\4.0.2.71\BaseRelease 将这次打包的完整包归档到BaseRelease路径

在输出BaseRelease后,通过GenerateMD5.py输出当前版本下的所有文件对应的md5,并保存到当前版本中,输出文件md5compare.txt


2.创建补丁包(PatchVersion)

Parsing command line: -ScriptsForProject=D:\jenkins\workspace\IterativePackage\你的项目.uproject BuildCookRun -project=D:\jenkins\workspace\IterativePackage\你的项目.uproject -noP4 -clientconfig=Development -nocompile -installed -utf8output -targetplatform=Win64 -build -cook -pak -generatepatch -basedonreleaseversion=71 -basedonreleaseversionroot=E:\IterativePackage\4.0.2.71 - -manifests -compressed -stage -package -archive -archivedirectory=E:\IterativePackage\4.0.2.71\LatestArchive

-generatepatch
-basedonreleaseversionroot=E:\IterativePackage\4.0.2.71一定要和基础版本打包的root一致
-basedonreleaseversion=71patch所基于的base包版本,方便在root目录下找到基础版本
-archivedirectory=E:\IterativePackage\4.0.2.71\LatestArchive用‘LatestArchive’来归档最新的包的版本输出,方便和‘BaseRelease’比较得出当前版本的差异

在补丁包完成,生成LatestArchive归档,通过脚本GenerateMD5.py生成对应版本的md5compare.txt,然后再通过OutputMD5Diff.pu与BaseRelease的md5进行对比,得出差异文件并打包压缩成patch.zip,归档到版本文件夹中

所有的补丁包只能基于发布包进行创建补丁,因此更新新版本时候不需要管中间版本,可以直接跨版本升级,如果跨发布包版本更新,是不可以的。当然,中间还有涉及文件删除,如中控版本更新需要删除无关js,这些在客户端更新时做处理,不在这边处理。

https://zhuanlan.zhihu.com/p/41931214 这篇文章详细介绍了一些参数的具体用法,有兴趣可以看看


路径解析

  • 大版本(4.0.2.71),还有一个记录版本和补丁的详细信息文件ReleaseVersion.json,其中所有的补丁文件都是和基础版本比较得出的,所以可以直接跨小版本更新
    在这里插入图片描述

  • 大版本(4.0.2.71)下的子版本信息(71、72),
    在这里插入图片描述

BaseRelease和LatestArchive都是可运行的,BaseRelease保存的是基础包的内容,LatestArchive永远保持最新的内容,其他的编号代表的是各个的版本,保存着各自的版本校验文件(md5),以及patch文件(patch.zip)

  • patch文件夹
    在这里插入图片描述

  • ReleaseVersion.json

{
    "VersionList": [
        {
            "version": "4.0.2.71",
            "basedOnVersion": "",
            "packageId": "71",
            "patchPath": "",
            "md5Patch": "4.0.2.71/BaseRelease/WindowsNoEditor/md5Compare.txt",
            "enabled": true,
            "baseVersionPath": "4.0.2.71/BaseRelease",
            "dateTime": "2022-02-21 11:45:32",
            "isBaseVersion": true
        },
        {
            "version": "4.0.2.72",
            "basedOnVersion": "4.0.2.71",
            "packageId": "72",
            "patchPath": "4.0.2.71/72/patch.zip",
            "md5Patch": "4.0.2.71/72/md5Compare.txt",
            "enabled": true,
            "baseVersionPath": "4.0.2.71/BaseRelease",
            "dateTime": "2022-02-22 09:46:22",
            "isBaseVersion": false
        }
    ]
}                                                 

更新程序

1.每个包里都有一个FetchUpdate.exe来获取更新,通过访问nginx上的ReleaseVersion.json中的每个版本信息,通过exe选择更新的版本(更新不更旧)
2.下载更新版本信息中的patch.zip直接解压缩到本地版本中,覆盖就可以完成更新,
3.在某些版本中,可能更新了中控台页面,涉及到文件删除,则需要md5重新对比出缺失文件进行删除。(这里的md5比较的是本地版本和更新到的版本,和打包的比较不一样,打包比较的是基础和新包)


其他

config不打包进pak

;DefaultGame.ini
[Staging]
+BlacklistConfigFiles=你的项目/Config/DefaultGameUserSettings.ini
+BlacklistConfigFiles=你的项目/Config/DefaultEngine.ini
+BlacklistConfigFiles=你的项目/Config/DefaultGame.ini
+BlacklistConfigFiles=你的项目/Config/DefaultInput.ini

在DefaultGame.ini中加入[Staging]节点,往BlacklistConfigFiles列表里面加入<项目>/config/不打包进pak的.ini
这一步,只是实现了ini不打包进pak,还需要将ini暴露到原来的文件路径,则需要在<项目>.build.cs中添加ini的引用关系。

RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "DefaultGameUserSettings.ini"));
RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "DefaultEngine.ini"));
RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "DefaultGame.ini"));
RuntimeDependencies.Add(Path.Combine(ModuleDirectory, "../../Config", "DefaultInput.ini"));
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值