關於AppCan引擎開源協議
AppCan引擎開源遵循LGPL寬通用公共許 可 證協議第三版:英文版
html
【應用引擎的技術原理】
經過對各大手機操做系統(如iOS、Android)和系統中瀏覽器引擎底層Webview及其API的封裝和擴展,將HTML標準中不提供支持的本地功能(好比攝 像頭,短信,電話等)以Javascript API接口的形式開放給HTML頁面調用,同時提供一套完整的Callback機制,實現HTML頁面直接與操做系統底層的交互通訊,Javascript腳本語言直接與操做系統C/C++1/JAVA/Object-C等原生語言之間通訊,實現系統與HTML頁面的無縫融合;經過在UI層次上實現一套模擬系統級別的應用(Widget)及應用管理機制、窗口(Window)及多窗口管理機制,達到基於HTML5開發移動應用的目的,實現核心引擎的跨平臺能力。
【應用引擎的整體架構】
應用引擎是一個支持HTML5應用運行的支撐平臺,經過引擎在各平臺上的適配來達到HTML5應用的跨平臺執行。核心引擎主要由
WidgetOne應用管理器
、
Widget
插件擴展機制
,以及
Native
插件擴展機制
三大部分組成。
1、WidgetOne應用管理器
WidgetOne應用管理器
是整個Widget的運行環境,功能主要包括Widget管理、Widget內部窗口管理、Widget的生命週期管理、消息事件管理、Widget間通訊機制和Widget的運行沙箱管理等。
全部的運行的Widget都有一個公共的父窗口WidgetContainer,Widget經過Widget的包名來標識,Widget之間能夠相互調用,支持Widget間窗口切換和窗口動畫,一個複雜的HTML5 應用能夠由多個Widget來組成。而每一個Widget有多個窗口組成,窗口經過ID/NAME來標識,每一個Widget內部的窗口系統都相互獨立,窗口之間支持相互調用,參數傳遞,窗口動畫,窗口預加載機制,浮動窗口機制等
所以,多窗口機制在開發過程當中很重要,根據不一樣的name來分辨不一樣的window(每個應用中,有且只有一個name爲'root'的窗口,通常把應用加載的第一個窗口默認的命名爲'root')。在不關閉窗口的狀況下,它們之間能夠經過uexWindow.open實現切換,而不用從新加載html頁面。爲了實現一些更好的用戶體驗,擴展了原生UI效果,好比ActionSheet,彈動效果等。它主要引進了主窗口和浮動窗口,這樣多的目的就是固定top和bottom部分,避免這兩部分隨着滾動條滾動。
窗口的實現原理:
(1)將設備屏幕可操做區域轉換爲Window的概念,經過拆分,將設備屏幕(Window)分紅了Top,Bottom,Main,PopOver(浮動窗口)區域,每一個區域由獨立的WebView組成,相互獨立,又相互通融,實現Window內的UI元素自由定義。
(2)經過模擬系統UI元素壓棧的方式(如Android平臺的Activity棧),將建立的Window壓入棧堆,經過對Window的命名,位置,大小,透明度,顯隱等屬性的控制,實現一套應用內支持建立多個Window,並對每一個Window生命週期進行單獨管理的機制,靈活管理Window的建立,顯示,隱藏,複用,銷燬,內存回收等。
(3)實現一套浮動窗口機制。即,同一個Window中理論上能夠建立足夠多個數的浮動窗口,而且根據建立的前後順序,覆蓋到當前Window中來,造成一塊獨立的區域,解決了手機上不支持局部div滾動,不支持IFrame高度定義等的硬傷,以及配套的上下拉刷新效果,OAuth驗證機制等功能的加入,加強了用戶體驗和爲開發者下降了開發難度。
(4)實現一套窗口間和窗口內浮動窗口間的交互機制。經過擴展的Javascript對象uexWindow對象下的諸多API,實現窗口間的交互。如uexWindow.evaluateScript(String inWindowName, String inType, StringinScript),可在任何一個Window中指定要在一個名爲inWindowName的Window中執行Javascript函數;而uexWindow.evaluatePopoverScript(String inWndName, String inPopName,String inScript)則可在任何一個Window中指定要在一個名爲inWndName的窗口下的名爲inPopName的浮動窗口中執行Javascript函數。
(5)實現窗口生命週期內的過分動畫效果。如窗口建立並被添加到屏幕上時,指定一個從左到右的切入效果,窗口被關閉銷燬時,指定一個從右到左的切出效果等等。基本達到了與系統級別UI界面切換效果的一致。
2、Widget 插件擴展機制
經過AppCan平臺生成的應用,能夠理解爲一個Widget包(即在IDE建立項目是看到的'phone'文件夾),和一個 AppCan平臺中間件組成的。一般的狀況下,一個應用是由一個Widget+AppCan構成,那麼,有沒有可能說'n個Widget+AppCan' 的機制呢,答應是確定的,這就是Widget 插件機制,是針對主widget以及普通widget 的一種加強性的擴展機制,能夠將具備特定功能的widget封裝成一個單獨的widget包存放到plugin 下,而後經過js擴展接口調用,以達到功能擴展的目的。咱們把'1個Widget+AppCan'中的那一個Widget叫作'主Widget',而另外 的'n-1'個Widget存在於主Widget的'plugin'目錄下。
3、Native插件擴展機制
有了Native插件的配合使用,開發者只要寫最簡單的HTML,CSS和JS,就能夠開發出一個體驗效果和原生無差異的應用。
首先,AppCan開放了原生插件擴展機制,靈活的自定義插件擴展架構,方便開發者快速集成自定義功能到應用開發中。開發者將自定義原生插件進行開發和上傳,便可在開發中直接調用。
其次,對目前平臺提供的數十種應用插件進行開源,開發者能夠根據自身業務需求來對開源插件進行擴展,或自行開發。
源碼在官網插件庫都可下載,分爲終端設備系統調用API、界面API、網絡API、多媒體API、第三方API等幾個類別,足夠覆蓋移動應用開發中的大部分經常使用場景。其中包含新的支付寶插件和新百度地圖SDK 封裝的百度地圖插件,備受關注的 QQ 登陸功能插件、微信分享(支付)插件,以及推送、攝 像頭、傳感器、LBS、二維碼、文件讀寫、網絡鏈接、上傳下載、短信、彩信、電話、郵件、圖片、第三方支付、音頻、視頻、壓縮、原生控件元素等核心功能。
Appcan的框架和發展愈來愈穩定,閒餘時間能夠學習下。