Unity热更新方案InjectFix

2023-11-21 21:48
文章标签 更新 unity 方案 injectfix

本文主要是介绍Unity热更新方案InjectFix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用InjectFix的热更新特性对c#代码进行修复,InjectFix对应的git地址为 https://github.com/Tencent/InjectFix

InjectFix无需对C#工程原有逻辑进行修改,并且可以用C#生成补丁,但是不能新增类和函数,因此更新方式也更加符合苹果审核规范。适合IOS端进行线上问题的修复

开发准备

拷贝InjectFix库文件

IFixToolKit拷贝到Unity项目的Assets同级目录

Assets/IFix,Assets/Plugins拷贝到Unity项目的Assets下

标识要热更新的类型

在Editor目录下创建InterpertConfig文件,对可进行热更的类进行配置。采用标识Namespace的方式,这样在该Namespace下的类均可进行热更新

using System.Collections.Generic;
using IFix;
using System;
using System.Reflection;
using System.Linq;//1、配置类必须打[Configure]标签
//2、必须放Editor目录
[Configure]
public class InterpertConfig
{[IFix]static IEnumerable<Type> ToProcess{get{return (from type in Assembly.Load("Assembly-CSharp").GetTypes()where type.Namespace == "YourNamespace" && !type.Name.Contains("<") select type);}}
}

修复流程

生成热更新资源

假定线上版本为1.0.0,此时需要发布一个对应的修复版本1.0.0.001

1、需要修改的文件添加库的命名域using IFix;在修改后的​函数上添加[Patch]标签。进行修复后,点击菜单栏的是InjectFix->Fix (新版本会有Fix,Fix(IOS)和Fix(Android)选项,直接选Fix选项)生成Assembly-CSharp.patch.bytes

2、将Assembly-CSharp.patch.bytes 上传到CDN服务器,对应信息和地址填入下方热更新配置表

3、服务器根据配置表下发对应热更新信息

热更新配置表

version

channel

fixVersion

abUrl

1.0.0

all

1.0.0.001

https://xxx.oss/app/hotfix/all/1.0.0.001

1.0.0

huawei

1.0.0.001

https://xxx.oss/app/hotfix/huawei/1.0.0.001

1.0.0

appstore

1.0.0.001

https://xxx.oss/app/hotfix/appstore/1.0.0.001

version:需要修复的版本号

channel:需要修复的渠道号,如果为all则为针对所有平台的修复包,如果为其他,则为具体渠道的修复包。优先判断具体渠道号的渠道包,如果没有则选择全平台修复包。

fixVersion:修复版本的版本号

abUrl:修复包的地址

客户端更新流程图

 

注意事项

在发布版本前需要先执行菜单栏InjectFix->Inject确保代码已经注入。否则热更无法生效

常见问题

Exception: can not load type[System.Int32,netstandard, Version=2.0.0.0, Culture = neutral. PublicKeyToken=cc7b13ffcd2ddd51]

这是由于补丁设置的backend和实际打包设置的不一样。补丁设置的是netstandard 2.0。所以把API Level改成.net 4.x 重新生成补丁包

 

这篇关于Unity热更新方案InjectFix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/405311

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

AI行业应用(不定期更新)

ChatPDF 可以让你上传一个 PDF 文件,然后针对这个 PDF 进行小结和提问。你可以把各种各样你要研究的分析报告交给它,快速获取到想要知道的信息。https://www.chatpdf.com/

GIS图形库更新2024.8.4-9.9

更多精彩内容请访问 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信:digital_twin123 Cesium 本期发布了1.121 版本。重大新闻,Cesium被Bentley收购。 ✨ 功能和改进 默认启用 MSAA,采样 4 次。若要关闭 MSAA,则可以设置scene.msaaSamples = 1。但是通过比较,发现并没有多大改善。

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.