一個可動態擴展的互動系統

作者 | 移動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 的誕生與起航


分享到:


相關文章: