移動端動態方案–VideoOS技術選擇及具體實施

voscommunity發表於2019-02-28

背景

動態化作為移動端的一個重要技術分支,一直是大家積極探索的方向。目前移動端流行的動態化方案,按技術方向分為以下兩種:

  • 跨平臺動態語言方案,利用js,lua等指令碼語言做native功能的擴充,需要定義各個跨語言的bridge。代表性的方案有Facebook的React Native,阿里的Weex,它們都是採用了JavaScript與Native之間的橋接,使JavaScript開發的App擁有近似於原生應用的效能。

  • 利用JVM或者iOS的Runtime來做動態生成程式碼或動態修改程式碼後做程式碼注入。代表性的方案有已經被App Store禁止的JSPatch。

但是Facebook的React Native和阿里的Weex接入以後會顯著增加App包的大小,還有環境搭建問題,不適合SDK的開發,只適合App開發。

通過對比幾種動態化方案,最後選擇阿里的LuaView方案來實現平臺的SDK。LuaView是由lua與Native控制元件之間的橋接來實現的,相對於其他解決方案來說,是一個輕量級的解決方案。而且Lua語言可擴充套件性強、簡單、高效、佔用體積小、啟動速度快、學習簡單等諸多優勢,有著許多成功案例,是動態化方案首選。

LuaView設計原則

LuaView以UI檢視構建能力為基礎,實現了原生Native UI橋接到Lua Api,使用Lua指令碼語言開發應用功能,同時能夠達到原生應用的效能和效果。

移動端動態方案–VideoOS技術選擇及具體實施

LuaView SDK整體架構

如圖,LuaView SDK的整體架構可以表示為四層。

第一、二層依次是OS層和Framework層,分別代表了Android、iOS以及對應的系統框架層。

第三層有Lua虛擬機器,指令碼管理模組,安全控制模組和核心Lib庫。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語言的簡單和易用。在核心UI庫上,所有的API做到精簡,儘量使用指令碼實現避免使用Native實現。所有API使用Lua原生語法,並且兩端的介面保持一致風格,方便開發。

VideoOS

VideoOS是一款針對視訊的互動娛樂系統,新增到視訊系統中,給視訊賦能,既可以增加視訊的收入,也可以增加視訊的娛樂性。

VideoOS整體架構

VideoOS移動端是在LuaView SDK的基礎上,擴充套件了VP UI和VP Non-UI,以及新增了視訊互動娛樂模組。VideoOS移動端使用LuaView的動態化,可以動態的新增新的互動娛樂模組,以及修改現有的互動娛樂模組。

VideoOS移動端架構

VideoOS首先會對比本地版本和伺服器版本,若是兩個版本不一致,將伺服器版本更新到本地,並寫入本地檔案Cache中。在系統執行互動娛樂模組時,LuaCore按照模板的檔名,在檔案Cache中查詢,找到指令碼檔案以後,即可載入執行指令碼檔案,展示具體的互動型別。具體的流程如下:

VideoOS移動端執行流程

應用
VideoOS中所有互動娛樂應用,如雲圖、中插、氣泡、投票等,都是採用統一的策略,將應用的共有屬性抽像為相同的引數,差異化的內容,則在應用中自己處理。這樣客戶端收到投遞的廣告時,將統一處理應用資料,按照應用資料時間,展示應用,控制應用展示的頻次,在這個階段系統並不知道處理的是哪個應用。應用展示時,根據應用資料展示具體的應用效果,所有的差異化的內容都在這個階段處理。同時,將應用中的各種事件,如展示、點選、關閉等,還有需要對接平臺處理的操作,抽象為統一的引數,這樣所有的應用都有一樣的事件處理機制。以上的這些特性,可以極大的增加系統的擴充套件性,如果系統需要新的應用,只需要按照上面的策略,統一新增投遞和事件處理的引數,實現特異化的內容,就可以新增到系統中了。

VideoOS應用引數

現在VideoOS已經完成雲圖、中插、氣泡、投票、卡牌、紅包等應用供使用者使用。

後續

VideoOS還在不斷完善,豐富Native到Lua的橋接,以及增加新的互動娛樂應用,最終將會發展為一個效能穩定,功能豐富的視訊增值系統。

參考

  1. VideoOS
  2. LuaView:基於Lua的移動端跨平臺動態化方案
  3. React Native中文網
  4. Weex
  5. OCS ——史上最瘋狂的 iOS 動態化方案

相關文章