lua热更框架之XLua】的更多相关文章

框架介绍 xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub.xLua最大的特色是不仅支持纯lua脚本热更,更是可以做 C# 代码的bug hotfix,即平时开发时使用C#,项目上线后,如果突然发现有bug,可以直接用lua去修复出bug的地方,原理就是通过[Hotfix]特性标记然后在IL逻辑层判断修改逻辑,使程序去执行更新后的lua逻辑代码而不是走之前的C#逻辑.   框架优势…
什么是热更新,为什么需要热更新?          热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来说,受到苹果审核的约束, 一次审核提交需要10~20天不等的等待时间.而这段时间开发进度依然会推进很多,一旦手游上线,第一个版本在玩家疯狂行为下,出点问题是必然的,所以”在线更新” 就成了家常便饭与必然.如果你要求必须整体重新下载完整下载包体,无法热更, 那么10~20多天后,游戏估计就没啥人了.…
上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计与构建过程表述如下,最后附带源码工程的下载链接,供广大学员参考研究.如果大家有什么不明白的地方,欢迎大家在评论区进行讨论.   1:首先基于笔者以前设计的SUIFW 框架,做进一步功能完善.   完善UI框架对于复杂窗体的直接转向功能.为了小伙伴们能够更好的理解本技术,文章末尾特提供了下载链接供大家…
出售一套Unity + Lua的客户端框架代码,功能有资源管理.网络通信.配置文件解析.热更新.文件读写.Lua加密揭秘.UI框架.打包工具.编辑器工具等,已经在多个实际项目(已上线)中使用.代码优雅,提供售后服务,可以节省大量开发时间(重写这么一套基础代码.编辑器工具.测试稳定.资深程序(主程序)花费的时间至少是也是1个月以上),欢迎咨询. QQ:773495257…
1.介绍 使用脚本开发游戏业务逻辑其中一个好处就是代码可线上热更,不停机修复bug.而热更代码的写法与需要被热更的文件的代码又有着密切的关系,本文介绍一种热更方法. 2.热更原理 Lua提供一个叫require的函数,实现文件的加载,require的作用可查看云风大大的参考手册说明  http://cloudwu.github.io/lua53doc/manual.html#pdf-require要热更一个已经被加载(require)过的模块,要做两件事件. 1. 将package.loaded…
这是什么东西 前阵子刚刚集成xlua到项目,目的只有一个:对线上游戏C#逻辑有Bug的地方执行修复,通过考察了xlua和tolua,最终选择了xlua,原因如下: 1)项目已经到了后期,线上版本迭代了好几次,所以引入Lua的目的不是为了开发新版本模块,而是修复旧版本Bug. 2)修复Bug针对的是iOS平台,总所周知,安卓平台是可以通过更新DLL去修复的,而修复Bug直接改写C#代码肯定要比整个函数翻译为Lua来得简单,实际上最后由于xlua注入和我们项目的安卓代码加密流程冲突,我们对安卓保留了…
Unity3D游戏轻量级xlua热修复框架   一 这是什么东西 前阵子刚刚集成xlua到项目,目的只有一个:对线上游戏C#逻辑有Bug的地方执行修复,通过考察xlua和tolua,最终选择了xlua,很大部分原因是因为项目已经到了后期,线上版本迭代了好几次,所以引入Lua的目的不是为了开发新版本模块.xlua在我们的这种情况下很是适用,如xlua作者所说,用C#开发,用lua热更,xlua这套框架为我们提供了诸多便利,至少我可以说,在面临同样的情况下,你用tolua去做同样的事情是很费心的.但…
事实上我们在安卓端是可以使用c#jit的,但是我们在ios上的代码是AOT(预先编译,静态编译)的,不能用c# jit(实时编译,即时编译). ios不能用c#热更是因为启动了CPU的No eXecute bit,简单说就是ios不允许更改代码,更新代码必须重新提安装包进行审核,AppStore审核过的代码才能执行.而lua解释器(通常来说就是lua.c中的代码)是审核过的,这才是为何lua可以运行在ios上的根本原因. lua在unity中作为一个文本资源来使用,当我们通过tolua或者xlu…
热重载,就是不重新开unity让代码的变化直接看出来,一般在开发时候使用 lua中通过require导入的文件,最终都存在package.loaded这个table中.require会判断是否文件已经加载避免重复加载同一文件所以需要先把package.loaded中对应的内容置空,然后再重新导入 for key,val in pairs(package.loaded) do print(key) if(key == "xxx") then package.loaded[key] = n…
http://www.manew.com/thread-114496-1-1.html   谈到目前的代码热更方案:没什么特别的要求   <ignore_js_op>    toLua(效率比sLua高)   打算以传统方式更新,热更仅仅用于紧急更新 / 希望战斗等性能敏感部分也能更新   xLua(性能在Lua系列中一般,但额外支持HotFix,可以更多使用C#代码)   基本上普通的项目也就只能用这两,也就是只有Lua一条路可走.   然而,由于Lua自身缺少编译期间语法检查以及缺乏必要的…
前言 前面铺垫了这么久,终于要开始写热更新了. Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新. 资源更新是Unity本来就支持的,在各大平台也都能用.而脚本的热更新在iOS平台则是不被允许的(除了Lua). 为了让一套代码能在各个平台都支持热更,将游戏的业务逻辑全面Lua化,是一种解决方法.这也是ToLua在做的事. 关于Unity热更与平台的关系 可以阅读陈嘉栋大佬的文章:谁偷了我的热更新?Mono,JIT,iOS 一.热更新的原理 1.热更新的简单理解    手机Ap…
现在一般使用的方案有:tulua&ulua.xlua.ILRuntime 对比: tulua&ulua 方案成熟,稳定第三方库支持 xlua 之前是为了热更修复线上bug的,腾讯发起的,现在也有部分从一开始就用xlua开发 ILRuntime 最近几年出的,一种全部C#语言开发,掌趣公司发起,现在去掉反射使用桥接类性能有很大提升.大家关注度比较高 lua 优点:稳定.使用的项目多.可行性多 缺点:静态语言,重构麻烦,查错难,学习成本高,维护成本高 ILruntime 优点:调用C#快,学习…
  Android平台出现了一些优秀的热更新方案,主要可以分为两类:一类是基于multidex的热更新框架,包括Nuwa.Tinker等:另一类就是native hook方案,如阿里开源的Andfix和Dexposed. 基于native hook的方案   需要针对dalvik虚拟机和art虚拟机做适配,需要考虑指令集的兼容问题,需要native代码支持,兼容性上会有一定的影响: 基于Multidex的方案   需要反射更改DexElements,改变Dex的加载顺序,这使得patch需要在下…
前不久,微信开源了其Android热补丁框架Tinker,它的特别之处在于放在github.com/Tencent下面,是该账号下第一个正式的开源项目,可以看到腾讯对它的重视和认可. 早在6月份微信客户端技术团队就透露了它的存在,并介绍了其原理,有人根据原理做了相关的demo,另外饿了么的热补丁框架amigo据说也参考了它,因此,Tinker的开源可以说是众望所归,在国内众多热补丁框架中独树一帜,引人瞩目. 框架作者张绍文撰文介绍了研发Tinker过程中的一些挑战和思考,本文是其第一篇,介绍Ti…
前言 大家好,我们这期继续借着我们工作室正在运营的在线游戏<江湖X>来谈一下热更新机制以及我们的理解和解决方案.这里先简单的介绍一下热更新的概念,熟悉这部分的朋友可以跳过,直接看我们的方案. 热更新的概念 首先,“热”是相对于“冷”而言的.所谓热更新,即不更新游戏安装包体的情况下,在游戏或游戏启动界面直接在线更新游戏包体的机制. 一般的在线游戏发布后,由于有需要修复BUG.发布更新内容等一系列需要,需要能够尽快的将更新包发布到安装本游戏的用户.以前单机时代的游戏,一般是发布一个新的下载客户端.…
关于阿里的开源热修复框架AndFix引起了广泛共鸣,受到了很多人的青睐.那今天就跟随我的步伐来详细了解一下AndFix的详细信息和使用方法.1.什么是AndFix? AndFix是阿里巴巴出的一个专门针对Android的热修复框架 ,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的. 看看阿里巴巴官方对AndFix的描述: 英文好的可以看官网说明文档(有翻译不妥欢迎指出) 1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app的一种解决方案. 2.A…
简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往比做事的方法本身更有意义.意义本身,往往蕴含着目的,最终的需求一类的东西;而方法,只是我们暂时寻找的用来达到最终的目的采取的一种可行的手段.知晓意义本身的意义在于,在以后的以后,我们有可能找到更合适的方法来实现目的;也就是我们所说的,到知识的丰富性得到一定程度之后,许多人在自己的个人技能提升过程中,…
简介 一个简单的关于页面,有一个图片,版本号,App名称等,着重演示各个系列的文章完整集成示例. 动机与意义 这是系列文章的最后一篇.今天抽空写下,收下尾.文章本身会在第四篇的基础上,简单扩充下代码,实现在线下载与重置更改的功能. 如果能较为仔细地阅读前四篇文章,第五篇给出的示例,应当是可以理解为无足轻重的.但是,大多数时候,我们更多的可能只是需要一个简易的解决方案,就是那种拿来就可以用的东西,那种我们需要先能看到一个简要的示例来看下效果再解决是否再继续阅读的方案.如此,对于很久以后,由于各种原…
必要的序 以后在写系列文章,准备把基本的规划和动机等,单独作为一个小的序言部分给独立出来.序言部分,可以较为完整地交待系列文章的写作动机,所展示的编码技术可能的应用场景等.个人,我还是比较看重文章或者书籍等的序言部分的.真有相对确定确实有价值的东西,才会进一步去阅读.所以,我觉得,序,总是必要的. 关于我写博客的节奏 我会尽可能地使每一个系列的文章,能相对完整.但是,就像你看到的这样,前一个系列还在讲Spark,这篇文章就开始讲 iOS 开发的一些问题.到底要闹哪样? 还能怎么样?开心就好!干嘛…
阿里巴巴推出的AndFix框架 首次给出大家这个框架的地址:https://github.com/alibaba/AndFix 对源码比较感兴趣的同学们可以自行研究代码 AndFix原理介绍 AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug.支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备.完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结尾的文件 原理…
Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容,发现 traceback 打印缺少文件名,这对于调试纠错有不小的影响. test.lua local M = {}function M.test()  assert(false, "test assert 5")endreturn M 如下测试: D:\Jinq\temp\lua>d…
Lua热更新(hotfix)(金庆的专栏)hotfixLua 5.2/5.3 hotfix. Hot update functions and keep old data.https://github.com/jinq0123/hotfixhotfix 实现了Lua热更新,仅对函数作替换,保留旧数据.例如 test.lua:local M = {}local a = "old"function M.get_a() return a endreturn M更新到local M = {}l…
2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案.阿里AndFix以及微信Tinker(Bugly sdk也集成Tikner热更新)和阿里最新出品Sophix.它们在原理各有不同,适用场景各异.不过从技术上来说多数热修复框架是基于ClassLoader加载机制.下面是常见热修复框架的比较. 开通热修复服务 读者可以打开Sophix热修复的官网:Sophix官网1.注册阿里云账号,选择移动热修复服务 ,选择之后需要开通此功…
实操重写IK分词器源码,基于mysql热更新词库参考网址:https://blog.csdn.net/wuzhiwei549/article/details/80451302 问题一:按照这篇文章的介绍,遇到一个问题:No suitable driver found for jdbc:mysql,搞了好久都没搞定,原因是没有找到这个驱动.后来看到一篇文章:https://blog.csdn.net/qq_24188167/article/details/77504505,里面有说明,具体需要你把…
Unity 代码编译成dll 更新dll实现热更代码 实现流程 代码编译成DLL DLL打包成AssetBundle 加载AssetBundle 加载代码程序集 获取指定类 使用反射赋值 C#代码编译成DLL 使用VS创建类库项目 模版->Visual C#-> .NET Framework 3.5-> 类库 名称即为DLL名字(反射的时候要用) 引用两个Unity相关DLL(防止编译报错) 右键项目->添加->引用 在引用管理器窗口->浏览->dll路径 Uni…
本文来自网易云社区 作者:王晨彦 前言 热修复和插件化是目前 Android 领域很火热的两门技术,也是 Android 开发工程师必备的技能. 目前比较流行的热修复方案有微信的 Tinker,手淘的 Sophix,美团的 Robust,以及 QQ 空间热修复方案. QQ 空间热修复方案使用Java实现,比较容易上手. 如果还不了解 QQ 空间方案的原理,请先学习安卓App热补丁动态修复技术介绍 今天,我们就基于 QQ 空间方案来深入学习热修复原理,并且手把手完成一个热修复框架. 本文参考了 N…
在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix.Tinker.Dexposed和Nuwa等等.如果只是会这些热修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们.这一个系列不会对某些热修复框架源码进行解析,而是讲解热修复框架的通用原理. 1.热修复的产生概述 在开发中我们会遇到如下的情况: 1. 刚发布的版本出现了严重的bug,这就需要去解决bug.测试并打渠道包…
本文来自网易云社区 作者:王晨彦 Application 处理 上面我们已经对所有 class 文件插入了 Hack 的引用,而插入 dex 是在 Application 中,Application 启动前肯定要先加载 Application.class,但这时 dex 还没被插入,因此肯定会引起 ClassNotFoundException ,因此我们不能使 Application 引用 Hack. 那么修改 class 文件时如何知道哪个是 Application 呢,有人可能会说直接特判不…
AndFix,全称是Android hot-fix.是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug.支持Android 2.3 到 6.0,并且支持arm 与 X86系统架构的设备.完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结尾的文件. # 测试结果说明: # 1. 测试能否修复Acitivity生命周期的方法 生成补丁 打补丁后的结果 成功!!!!!!!!!! 2.测试能否修复Fragment生命周期的方法 生成补丁 打补丁后的…
当你们看到Tinker的时候是不是有点愣逼这个是什么东西? 简单来说就是不需要重新下载app和重新安装app 来进行更新app的技术框架. 看看这个吧,我也是才学习 ,先做个学习记录 参考:Tinker 热修复框架 简单上手教程…