标签:cms ttl 效率 nap 原理 ttyu ast 路径依赖 erb
孙广东 2016.3.11
Unity应用的iOS热更新
作者:丁治宇
Unity TechnologiesChina
Agenda
? 什么是热更新
? 为何要热更新
? 怎样在iOS 上对Unity 应用进行热更新
? 支持Unity iOS 热更新的各种Lua 插件的对照
什么是热更新
? 广义定义
? 无需关闭server,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。
? 狭义定义( iOS热更新)
? 无需将代码又一次打包提交至AppStore,就可以更新client的执行代码,即不用下载app而自己主动更新程序。
? 现状
? 苹果禁止了C#的部分反射操作,禁止JIT(即时编译。程序执行时创建并执行新代码),不同意逻辑热更新,仅仅同意使用AssetBundle进行资源热更新。
为何要热更新
? 缩短用户获取新版应用的client的流程。改善用户体验。
? 详细到iOS平台的应用上。有下面几个原因
? App Store的审核周期难控制。
? 手机应用更新频繁。
? 对于大型应用,更新成本太大。
? 终极状态
? 不又一次下载、不停机状态下全然变换一个应用的内容。
怎样在iOS 上对Unity 应用进行热更新
? Android 应用的热更新
? 将执行代码预编译为assemblydll。
? 将代码作为TextAsset打包进Assetbundle。
? 执行时。使用Reflection机制实现代码的功能。
? 更新对应的Assetbundle就可以实现热更新。
? Android 与iOS 热更新的 异同
? 苹果官方禁止iOS下的程序热更新;JIT在iOS下无效。
? 热更新方案:Unity+Lua插件。
? 使用Lua 插件进行iOS 热更新的 原理
? Unity 热更新的注意点
? 须要更新的代码、资源,都必须打包成AssetBundle(建议使用未压缩的格式打包)
? 熟悉Unity的几个重要的路径
? Resources(仅仅读)
? StreamingAssets(仅仅读)
? Application.dataPath(仅仅读)
? Application.persistentDataPath(可读写)
? 重要路径之 之Resources
? Resources目录下的资源不管使用与否都会被打包
? 资源会被压缩,转化成二进制
? 打包后目录下的资源仅仅读
? 无法动态更改,无法做热更新
? 使用Resources.Load载入
? 重要路径之StreamingAssets
? 流数据的缓存目录
? 目录下的资源不管使用与否都会被打包
? 资源不会被压缩和加密
? 打包后目录下的资源仅仅读,主要存放二进制文件
? 无法做热更新
? WWW类载入(一般用CreateFromFile 。若资源是AssetBundle,根据其打包方式看是否是压缩的来决定)
? 相对路径。详细路径依赖于实际平台
?Application.streamingAssetsPath
? IOS: Application.dataPath + “/Raw” 或Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
? 重要路径之Application.dataPath
? 游戏的数据目录的路径(比如在Editor中的Assets)
? 非常少用到
? 无法做热更新
? IOS路径: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
? 重要路径之Application.persistentDataPath
? 持久化数据存储目录的路径( 沙盒目录。打包之前不存在 )
? 目录下的资源不管使用与否都会被打包
? 执行时有效。可读写
? 无内容限制,从StreamingAsset中读取二进制文件或从AssetBundle读取文件来写入PersistentDataPath中
? 适合热更新
? IOS路径: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
? 使用Lua 插件进行iOS 热更新的整体流程
支持Unity iOS 热更新的各种Lua 插件的对照
? uLua(asset store)
? uLua插件原生版本号,开山鼻祖
? 不会产生静态代码
? 反射机制,效率低下,速度慢,gcalloc频繁
? 已停止更新维护。不支持Unity5.x,淡出主流
? uLua & cstoLua
? 开发平台成熟稳定。Bug修复迅速
? 开发人员众多,资源丰富
? 静态方法,性能优
? 有成功商业产品案例(啪啪三国、超神战队、酷鱼吧捕鱼、绝地战警、这不是刀塔等) 鱼、绝地战警、这不是刀塔等)
? 都是基于原生版本号的改进。未来。两者会合并成一个插件
? sLua
? 静态方法,性能优
? 核心代码简洁
? 资源较少,开发平台不够成熟稳定
? 无 无成功商业产品案例 成功商业产品案例
? 基于原生版本号的改进
支持Unity iOS 热更新的各种Lua 插件的对照
? C#Light(L#)
? 淡出主流
? uniLua
? c#实现的Lua虚拟机,非完整方案
? 淡出主流
支持Unity iOS 热更新的各种Lua 插件的对照
然后就是 uLua 和 sLua的測试代码。
综合来看 肯定是 uLua 会更好一些。
測试结果就不弄了 , 大家能够下载PDF 自己看
标签:cms ttl 效率 nap 原理 ttyu ast 路径依赖 erb
原文地址:http://www.cnblogs.com/wzzkaifa/p/7262499.html