作者 | 移动Team景生善
整理 | 包包
背景
动态化作为移动端的一个重要技术分支,一直是大家积极探索的方向。目前移动端流行的动态化方案有,Facebook的React Native,阿里的Weex,它们都是采用了JavaScript与Native之间的桥接,使JavaScript开发的App拥有近似于原生应用的性能。
其他的一些动态化方案,像历史悠久的WaxPatch动态化方案,已经被App Store禁止的JSPatch,阿里的LuaView,腾讯的OCS,滴滴的DynamicCocoa。
但是Facebook的React Native和阿里的Weex接入以后会显著增加App包的大小,还有环境搭建问题,不适合SDK的开发,只适合App开发。
通过对比几种动态化方案,最后选择阿里的LuaView方案来实现平台的SDK。LuaView是由lua与Native控件之间的桥接来实现的,相对于其他解决方案来说,是一个轻量级的解决方案。而且Lua语言可扩展性强、简单、高效、占用体积小、启动速度快、学习简单等诸多优势,有着许多成功案例,是动态化方案首选。
LuaView设计原则
LuaView以UI视图构建能力为基础,实现了原生Native UI桥接到Lua Api,使用Lua脚本语言开发应用功能,同时能够达到原生应用的性能和效果。
LuaView SDK整体架构(注:图片来自于《LuaView:基于Lua的移动端跨平台动态化方案》)
如图,LuaView SDK的整体架构可以表示为五层。
第一、二层依次是OS层和Framework层,分别代表了Android、iOS以及对应的系统框架层。
第三层有Lua虚拟机,脚本管理模块和安全控制模块。Android使用的是LuaJ虚拟机,iOS使用的是LuaC虚拟机,这两个虚拟机都是目前两种语言中用的最广泛,最稳定的虚拟机。脚本管理模块负责Lua脚本的管理,包括脚本的解包、验证、加解密、解压缩等工作。安全控制模块负责Lua脚本的安全校验工作,包括脚本完整性校验和脚本安全校验等。
第四层是LuaView的核心Lib库,包括Lua UI Lib(主要是所有的UI组件,如View、Button、Label、Image等)和Lua Non-UI Lib(主要包括Network、Json、Gesture)。
最上层是Lua业务脚本以及Lua层的lib库。
LuaView的两个重要的设计原则
两端一致性
LuaView的一条重要设计原则就是iOS和Android两端逻辑只写一份代码,API设计的时候考虑了两端的共性,对于两端不同的地方,则由Native部分实现。现在,LuaView SDK中Lua API基本完成两端接口的统一,保证API一致性,同一份脚本在两端运行的结果也是相同的。
(注:图片来自于《LuaView:基于Lua的移动端跨平台动态化方案》)
简单易用
LuaView的另一个设计原则是保持Lua语言的简单和易用。在核心UI库上,所有的API做到精简,尽量使用脚本实现避免使用Native实现。所有API使用Lua原生语法,并且两端的接口保持一致风格,方便开发。
OSLua
OSLua是一款针对视频的互动娱乐的SDK,添加到视频系统中,给视频赋能,既可以增加视频的收入,也可以增加视频的娱乐性。OSLua SDK是在LuaView SDK的基础上,扩展了VP UI和VP Non-UI,以及添加了视频互动娱乐模块。OSLua使用LuaView的动态化,可以动态的添加新的互动娱乐模块,以及修改现有的互动娱乐模块。
OSLua整体架构
OSLua首先会对比本地版本和服务器版本,若是两个版本不一致,将服务器版本更新到本地,并写入本地文件Cache中。在系统运行互动娱乐模块时,LuaCore按照模板的文件名,在文件Cache中查找,找到脚本文件以后,即可加载运行脚本文件,展示具体的互动类型。具体的流程如下:
OSLua运行流程
模板
OSLua中所有互动娱乐模块,如云图、中插、气泡、投票等,都是采用统一的策略,将模板的共有属性抽像为相同的参数,差异化的内容,则在模板中自己处理。这样客户端收到投递的广告时,将统一处理模板数据,按照模板数据时间,展示模板,控制模板展示的频次,在这个阶段系统并不知道处理的是哪个模板。模板展示时,根据模板数据展示具体的模板效果,所有的差异化的内容都在这个阶段处理。同时,将模板中的各种事件,如展示、点击、关闭等,还有需要对接平台处理的操作,抽象为统一的参数,这样所有的模板都有一样的事件处理机制。以上的这些特性,可以极大的增加系统的扩展性,如果系统需要新的模板,只需要按照上面的策略,统一添加投递和事件处理的参数,实现特异化的内容,就可以添加到系统中了。
OSLua模板参数
后续
OS Lua还在不断完善,丰富Native到Lua的桥接,以及增加新的互动娱乐模板,最终将会发展为一个性能稳定,功能丰富的视频增值SDK。
参考
1. LuaView:基于Lua的移动端跨平台动态化方案
2. React Native中文网
3. Weex
4. OCS ——史上最疯狂的iOS 动态化方案
5. 滴滴iOS 动态化方案DynamicCocoa 的诞生与起航
-
移动端
+关注
关注
0文章
42浏览量
4452 -
系统
+关注
关注
1文章
1020浏览量
21447
发布评论请先 登录
相关推荐
讯维高清互动教育录播系统:引领教育信息化新篇章!
开源项目!手把手教你制作一个互动式LED墙壁时钟!
扩展您的串口设备 EU104数据转发芯片可独立设置通讯速率和参数 将1个UART接口扩展为4个
迅为RK3568开发板传统分区和定制扩展分区镜像对比
如何构建一个高效、安全、可扩展的跨工厂IoT平台?
大屏数字互动墙软件 液晶拼接屏互动软件 LED大屏交互软件
![大屏数字<b class='flag-5'>互动</b>墙软件 液晶拼接屏<b class='flag-5'>互动</b>软件 LED大屏交互软件](https://file1.elecfans.com//web2/M00/0A/0C/wKgZomcYv5KAVU-fAAY9Hmg3PHs596.jpg)
第三代功率半导体器件动态可靠性测试系统
适用于可扩展系统的高效、无代码、无传感器BLDC电机驱动器
![适用于<b class='flag-5'>可</b><b class='flag-5'>扩展</b><b class='flag-5'>系统</b>的高效、无代码、无传感器BLDC电机驱动器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
闭环增益对系统动态性能的影响
闲置PCIe插槽也能利用起来,一款可轻松抽取的SATA硬盘扩展卡
![闲置PCIe插槽也能利用起来,<b class='flag-5'>一</b>款<b class='flag-5'>可</b>轻松抽取的SATA硬盘<b class='flag-5'>扩展</b>卡](https://file1.elecfans.com/web2/M00/EE/8B/wKgaomZr5mCAdsxdAACfAEdXlrg506.png)
评论