腾讯正式开源面向 Unity 项目的 Bug 修复神器 InjectFix
副问题[/!--empirenews.page--]
InjectFix是腾讯最新对外开源的Unity代码逻辑热修复方案,可实此刻Unity线上客户端内,不消迭代新版本,就能快速修复游戏的线上bug。 先说几个亮点:
InjectFix经腾讯内部多个项目应用反馈异常精采,不只能办理线上bug,还可以有用的进步一般开拓服从,下面我们聊下这项目标宿世此生。 热更方案大乱斗全部支持iOS的热更方案都有个配合点:更新儿女码都是理会执行。假如按其更新前是否理会执行,可以分为两大类: 一类是某些模块乃至整个游戏,都一向理会执行。这是最传统的方法,今朝市面上全部主流方案(xLua,slua,tolua,ILRuntime,jsb等等)都支持这种方法。这种方法的特点:
ps:也有一种思绪是通过一个C#转XX剧本器材来实现C#编码,理会执行,但假如你是一个已有项目想这么转一下,或许率是失败的,除非你一开始就在用这方法在开拓,遇到坑就避开,由于这类方案每每不是完备支持所有语法,支持的语法也不必然能完全同等。
其它一类是以原生方法跑,假若有bug,把逻辑重定向到新的,理会执行的逻辑。这种方法的特点:
第二种方法是接下来接头的重点,利便起见,我们称之为“热修复”,热修复最早的成熟方案是xLua提供,颠末两年来的行使已经逐渐被接管,tolua#其后也插手了这成果,也有一些网友基于ILRuntime做了热修复成果。 InjectFix是什么?InjectFix就是一个热修复的实现。那它和其余热修复方案又有什么差异呢? 假想这么个场景,我们有一个一千行代码的函数,个中有一行有题目,我们必要修复它。 假如用xLua,必要用lua去从头实现一遍这个函数,事变量大。而基于ILRuntime的热修复,因为其补丁是另一个措施集,它无法直接会见原类的私有成员,以是那999行正常代码一样平常也不能直接行使,必要做较多修改。 而InjectFix不必要用lua,也不必要像ILRuntime热修复那样其它建一个工程把那一千行逻辑重实现。只必要在Unity原工程直接改掉这行代码,然后标注这函数要更新即可。 不只云云,InjectFix尚有其余上风:
它也有弱点,不支持新增类,也不支持在已有类新增字段,修bug照旧够用的,但难以通过热更为游戏增进新成果。InjectFix就一个纯粹的修bug器材罢了。 黑科技因为InjectFix支持一再加载补丁,新加载补丁会自动包围上一个,这特征可以用来实现真机代码逻辑及时修改。 (视频地点:https://v.qq.com/x/page/v09240mo6ai.html?&ptag=4_7.2.5.22206_copy) 苹果政策合规性各热更方案群的问的频率最高的题目之一:这方案会不会导致我游戏苹果考核不通过。 让我们看看苹果的热更新条款: 可以看到最新条款应承下载代码理会执行,但条件是不能通过新增特征和成果来把措施改得(和考核时对比)涣然一新。再看看凡是被拒时的来由中的Guideline 2.5.2里的一句:
有“新增特征和成果”手段的热更新方案的忧伤之处在于有“改得涣然一新”的手段。而InjectFix从它提供的手段(只能修改已有函数)来看,并不具备“新增特征和成果”的手段,这原来是瑕玷,放在这里却成为合规性的担保了。 根基道理InjectFix项目标研发挺曲折的。InjectFix和xLua是统一个作者,也是本文笔者,其时xLua开源后,不绝有人提但愿提供个C#转lua的器材,而深入研究认为实现个il假造机事变量还更小,这样还能停止lua的一些gc题目。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |