unity打包sdk热更新笔记

devtools/2025/1/14 20:14:53/

基础打包需要知识:
安装包大小不要超过2G,AB包数量过多会影响加载和构建,多次IO,用Gradle打包,要支持64位系统,不同的渠道包:让做sdk的人支持,提供渠道包的打包工具
配置系统环境变量,可快速执行某个exe bat命令
删除模型默认材质(因为用的是ab的,所以没用,默认的没用)
设置图集Tag
静态资源只被一个资源依赖不给ab包名(例如材质和贴图,材质生成,但是贴图不生成资源索引)
生成xlua,如果有用到lua
收集shader变体
打ab的策略:
1.先根据配置确定动态资源分包,然后根据以下原则,循环确定静态资源分包
2.只被一个(动态/静态)包依赖的资源,打进同一包
3.被多个(动态/静态)包依赖的资源,单独分一个包
4.纹理和fbx的模型,一般不生成,不给包名
打包时候下载ab资源的时候使用的unitywebrequest
ab下载的路径在Application.persistentDataPath可读可写,被称为外包路径,window在appdata/用户名下面
版本号,本次版本修改的ab文件相对于上一次和ab文件的差异的ab会记录在csv表格中
gradle工程是一个在IL2CPP文件夹下的工程
同一个游戏不同unity工程的资源的guid不能不一样,否则别人提交会有问题,资源管理的基础,图片的guid被prefab依赖
游戏运行时候是先从persistentDataPath加载ab,找不到再到内包上找
启用ab的Disable Write TypeTree,可以提高打包速度

Unity3D项目Plugins目录组织

https://blog.csdn.net/linxinfa/article/details/102978005

IPreprocessBuild

继承提供打包前,打包后接口

BuildAssetBundles

UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync

数据完整性校验方式

AndroidManfiest对象获得依赖

替代ab的addressable

https://blog.csdn.net/u012338130/article/details/104135468
https://blog.csdn.net/linxinfa/article/details/122390621
要注意addressable热更新之后没有删除的重复缓存问题,在这里插入图片描述
下载的时候这个mergenode要选择none,某教程教我们写union,就是同个key保留了

AssetStudio 对没有加密的ab包进行逆向

Host的作用

https://blog.csdn.net/qq_35246620/article/details/66970211,一般谁做服务器谁提供一个端口给外面客户端连接,有开放端口了要配置一个Host

HybridClr

https://blog.csdn.net/u013774978/article/details/131565741

Gradle

https://linxinfa.blog.csdn.net/article/details/118553713

Jenkins

https://blog.csdn.net/linxinfa/article/details/118816132
https://www.jenkins-zh.cn/tutorial/management/mirror/ 中文社区,上面有镜像源,下载出问题先设置
在这里插入图片描述
jenkins的归档路径,密码,端口配置相关基本都在配置文件上
jenkins restart
unity 插件直接使用unity命令
-quit -batchmode -projectPath “C:\D\UnityProject\BuildApkAndHotUpdate” -executeMethod BuildTool.BuildApk productName=&productName -logFile C:\D\UnityProject\apk\output.log"

Bat文件

打包中常用Bat命令:

svn:

1.svn update %WorkPath% --username 用户名 --password 密码
2.svn clearup
3.svn revert * 更新之前应该先还原
4.Unity.exe -projectpath unity工程路径 -quit -batchmode -executeMethod 类名.方法名 -logFile log文件路径
5.Winrar.exe -a -r -ep1 文件夹路径 归档路径
jenkins和unity中传参,通过文件传参
6,java 安卓生成密钥 在这里插入图片描述
在这里插入图片描述
用一样的密码,密码要在打包代码里面用代码输入

打包相关参数:

EditorUserBuildSettings.development=true;
EditorUserBuildSettings.connectProfiler=true; 这个开启profiler
projectNama和版本号:
在这里插入图片描述
分别会显示在你手机这个app的应用信息里面
安卓需要 密钥 keystore
ios需要开发者账号和开发者证书(调试版和发布版),先注册账号进入账号界面操作,ipa跟apk一样是ios的包代表

打包常用API相关

1.String:StartWith用于判断是否是某个目录下的资源,根据路径。
2.string[] guids = AssetDatabase.FindAssets(null, SearchFolder.ToArray()); 从路径集合下搜索所有的文件返回guid列表
3.string path = AssetDatabase.GUIDToAssetPath(guids[i]);
4.AssetDatabase.GetAssetDependencyHash(path).ToString();用来生成文件的hash,增加比较效率
5.string[] dps = AssetDatabase.GetDependencies(path, false);获得path这个文件的依赖资源路径列表
6.String:SubString()例如截取到相对于Asset的路径
7.ath.GetFileNameWithoutExtension(assetPath);直接获取文件名称
8.EditorUtility.DisplayCancelableProgressBar($“动态资源:生成资源包名映射:({i}/{assetCount})”, assetPath, i * 1.0f / assetCount);进度相关显示进度条
9.EditorUtility.ClearProgressBar();清除进度条
10.HashSet 经常使用可以去重
11. var manifest = BuildPipeline.BuildAssetBundles(path:string, buildList:List, option:BuildAssetBundleOptions, buildPlatform); 用这个接口,就不用调用那个设置prefab ab包名的接口了,直接把包名和对应的assetname名传进去。相对于asset的路径。AssetBundleBuild,所有对应的文件对应一个包名
12. //设置签名
PlayerSettings.Android.keystoreName = _buildApkConfig[BuildKeystoreNameKey];
PlayerSettings.Android.keystorePass = _buildApkConfig[BuildKeystorePassKey];
PlayerSettings.Android.keyaliasName = _buildApkConfig[BuildKeyaliasNameKey];
PlayerSettings.Android.keyaliasPass = _buildApkConfig[BuildKeyaliasPassKey];
13. CSObjectWrapEditor.Generator.ClearAll();
CSObjectWrapEditor.Generator.GenAll(); XLUA的
14. Directory.GetDirectories
15. option |= BuildAssetBundleOptions.ForceRebuildAssetBundle; BuildAssetBundles的时候加上这个标签,会强制从0开始ab,否则会比对目录下只打增量修改的ab
16. Application.version可以用来判断是不是第一次安装包,热更了资源的包的这个字段还是不变
17.在这里插入图片描述
VersionCode可以用来表示是不是新的版本的包

打包常见报错:

1.gradle没找到,配置一下国内镜像在settingTemplate文件里面
https://blog.csdn.net/RabbitLikeCitrus/article/details/107022571

华佗热更DLL

华佗热更dll就是用华佗把dll变成byte打进某个ab里面去,然后更新ab,下下来,从ab里面读取字节流加载成dll
在这里插入图片描述
Assembly.Load(dllByte.bytes)


http://www.ppmy.cn/devtools/150498.html

相关文章

双线性插值算法:原理、实现、优化及在图像处理和多领域中的广泛应用与发展趋势(二)

五、图像金字塔和多尺度分析 双线性插值在图像金字塔的构建中也发挥着重要的作用。图像金字塔是一种多分辨率表示图像的结构,通常包括一个原始图像的不同分辨率的版本。在构建图像金字塔时,我们可以通过不断地对图像进行下采样(缩小&#xf…

TypeScript 爬虫项目实战:抓取豆瓣电影 Top 250(TypeScript简单应用)

项目介绍 通过 TypeScript 实现一个简单的爬虫程序,从豆瓣电影 Top 250 页面抓取电影的标题和评论信息,并将数据存储到本地 JSON 文件中。该项目使用了 superagent 和 cheerio 两个核心工具: superagent:一个轻量的 HTTP 请求库…

性能测试工具的原理与架构解析

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在软件开发与运维领域,性能测试是确保系统稳定、高效运行的关键环节。性能测试工具作为实现这一目标的重要工具,通过模拟真实用户行为和负载…

vue时间格式转换

在 Vue 前端中,如果你想将日期格式改为 "yyyy-MM-dd HH:mm:ss",可以使用 JavaScript 的 Date 对象以及常用的日期处理库(比如 moment.js 或 dayjs)来实现格式化。以下是两种常见的解决方案: 方法 1: 使用 d…

关于使用FastGPT 摸索的QA

近期在通过fastGPT,创建一些基于特定业务场景的、相对复杂的Agent智能体应用。 工作流在AI模型的基础上,可以定义业务逻辑,满足输出对话之外的需求。 在最近3个月来的摸索和实践中,一些基于经验的小问题点(自己也常常…

python 生成24bit音频数据实例解析

一 概念 24 bit 是指音频文件的 采样深度 (bit depth)。 它代表了每个采样点的数据精度,也就是音频每个样本所使用的比特数。 24 bit 的采样深度相较于 16 bit 提供了更高的动态范围和更精确的音频信息表示。 动态范围:24 bit 的…

vue.js路由重定向

在Vue.js中,路由重定向是指当用户访问某个特定路由时,自动将其重定向到另一个路由。这在应用程序中非常有用,可以将用户引导到特定的页面或重定向到其他相关页面。 在Vue.js中,我们可以通过routes数组中的redirect属性来实现路由…

STM32 FreeRTOS移植

目录 FreeRTOS源码结构介绍 获取源码 1、 官网下载 2、 Github下载 源码结构介绍 源码整体结构 FreeRTOS文件夹结构 Source文件夹结构如下 portable文件夹结构 RVDS文件夹 MemMang文件夹 FreeRTOS在基于寄存器项目中移植步骤 目录添加源码文件 工程添加源码文件 …