動態化做爲移動端的一個重要技術分支,一直是你們積極探索的方向。目前移動端流行的動態化方案,按技術方向分爲如下兩種:react
跨平臺動態語言方案,利用js,lua等腳本語言作native功能的拓展,須要定義各個跨語言的bridge。表明性的方案有Facebook的React Native,阿里的Weex,它們都是採用了JavaScript與Native之間的橋接,使JavaScript開發的App擁有近似於原生應用的性能。apache
利用JVM或者iOS的Runtime來作動態生成代碼或動態修改代碼後作代碼注入。表明性的方案有已經被App Store禁止的JSPatch。安全
可是Facebook的React Native和阿里的Weex接入之後會顯著增長App包的大小,還有環境搭建問題,不適合SDK的開發,只適合App開發。服務器
經過對比幾種動態化方案,最後選擇阿里的LuaView方案來實現平臺的SDK。LuaView是由lua與Native控件之間的橋接來實現的,相對於其餘解決方案來講,是一個輕量級的解決方案。並且Lua語言可擴展性強、簡單、高效、佔用體積小、啓動速度快、學習簡單等諸多優點,有着許多成功案例,是動態化方案首選。weex
LuaView以UI視圖構建能力爲基礎,實現了原生Native UI橋接到Lua Api,使用Lua腳本語言開發應用功能,同時可以達到原生應用的性能和效果。 架構
LuaView SDK總體架構如圖,LuaView SDK的總體架構能夠表示爲四層。框架
第1、二層依次是OS層和Framework層,分別表明了Android、iOS以及對應的系統框架層。ide
第三層有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的一條重要設計原則就是iOS和Android兩端邏輯只寫一份代碼,API設計的時候考慮了兩端的共性,對於兩端不一樣的地方,則由Native部分實現。如今,LuaView SDK中Lua API基本完成兩端接口的統一,保證API一致性,同一份腳本在兩端運行的結果也是相同的。
LuaView的另外一個設計原則是保持Lua語言的簡單和易用。在覈心UI庫上,全部的API作到精簡,儘可能使用腳本實現避免使用Native實現。全部API使用Lua原生語法,而且兩端的接口保持一致風格,方便開發。
VideoOS是一款針對視頻的互動娛樂系統,添加到視頻系統中,給視頻賦能,既能夠增長視頻的收入,也能夠增長視頻的娛樂性。
VideoOS移動端是在LuaView SDK的基礎上,擴展了VP UI和VP Non-UI,以及添加了視頻互動娛樂模塊。VideoOS移動端使用LuaView的動態化,能夠動態的添加新的互動娛樂模塊,以及修改現有的互動娛樂模塊。
VideoOS首先會對比本地版本和服務器版本,如果兩個版本不一致,將服務器版本更新到本地,並寫入本地文件Cache中。在系統運行互動娛樂模塊時,LuaCore按照模板的文件名,在文件Cache中查找,找到腳本文件之後,便可加載運行腳本文件,展現具體的互動類型。具體的流程以下:
應用 VideoOS中全部互動娛樂應用,如雲圖、中插、氣泡、投票等,都是採用統一的策略,將應用的共有屬性抽像爲相同的參數,差別化的內容,則在應用中本身處理。這樣客戶端收到投遞的廣告時,將統一處理應用數據,按照應用數據時間,展現應用,控制應用展現的頻次,在這個階段系統並不知道處理的是哪一個應用。應用展現時,根據應用數據展現具體的應用效果,全部的差別化的內容都在這個階段處理。同時,將應用中的各類事件,如展現、點擊、關閉等,還有須要對接平臺處理的操做,抽象爲統一的參數,這樣全部的應用都有同樣的事件處理機制。以上的這些特性,能夠極大的增長系統的擴展性,若是系統須要新的應用,只須要按照上面的策略,統一添加投遞和事件處理的參數,實現特異化的內容,就能夠添加到系統中了。
如今VideoOS已經完成雲圖、中插、氣泡、投票、卡牌、紅包等應用供用戶使用。
VideoOS還在不斷完善,豐富Native到Lua的橋接,以及增長新的互動娛樂應用,最終將會發展爲一個性能穩定,功能豐富的視頻增值系統。