NativeScript跨平臺(tái)移動(dòng)端開(kāi)發(fā)
NativeScript 可以使用 Javascript,CSS, XML 創(chuàng)建真正的 Native 跨平臺(tái)應(yīng)用,支持 iOS Android,NativeScript 將您的跨平臺(tái)代碼翻譯成目標(biāo)平臺(tái)的代碼。
UI 使用 XML 描述,CSS 樣式,在編譯時(shí)將 UI 轉(zhuǎn)化成本地原生代碼,最終得到正在的 Native 原生應(yīng)用。
Telerik 公開(kāi)了用于創(chuàng)建安卓、iOS和Windows Universal跨平臺(tái)原生應(yīng)用的框架,NativeScript 的公共訪(fǎng)問(wèn)權(quán)限。
NativeScript既不是一種新型的JavaScript語(yǔ)言,也不是原生功能的封裝器,它包括一個(gè)JavaScript運(yùn)行時(shí)環(huán)境和一種將 JavaScript調(diào)用轉(zhuǎn)化為原生調(diào)用的機(jī)制。用JavaScript(或TypeScript,CoffeeScript等)語(yǔ)言編寫(xiě)應(yīng)用,之后在安 卓平臺(tái)用V8,在iOS和Windows Phone上用WebKit JavaScriptCore解釋?xiě)?yīng)用。然后,NativeScript運(yùn)行時(shí)環(huán)境找到原生的目標(biāo)API,將JS數(shù)據(jù)類(lèi)型轉(zhuǎn)化為相應(yīng)的原生類(lèi)型,然后調(diào)用原生API,并將得到的結(jié)果值返回,具體流程如下圖所示:
![]()
舉例來(lái)說(shuō),在安卓平臺(tái)上創(chuàng)建文件對(duì)象var file = new java.io.File(path);的步驟如下:
-
用V8解釋代碼
-
根據(jù)原數(shù)據(jù)確定相應(yīng)的原生方法調(diào)用。原數(shù)據(jù)是在各個(gè)平臺(tái)上預(yù)先構(gòu)建的提供類(lèi)型和方法簽名的全部可用API集合。
-
類(lèi)型轉(zhuǎn)換模塊將JavaScript的String類(lèi)型轉(zhuǎn)換為一個(gè)java.lang.String對(duì)象
-
運(yùn)行時(shí)環(huán)境為java.io.File創(chuàng)建一個(gè)代理對(duì)象
-
通過(guò)該代理將對(duì)原有JS File對(duì)象的調(diào)用委托給相應(yīng)的Java實(shí)例
據(jù)Telerik介紹,與純?cè)a相比NativeScript運(yùn)行時(shí)環(huán)境會(huì)帶來(lái)大概10%的性能損失。
NativeScript可以將其所支持平臺(tái)上的任意原生API作為目標(biāo),包括傳感器接口A(yíng)PI和用Objective C,Java或.NET編寫(xiě)的第三方庫(kù)。UI組件是原生的,UI事件由在JavaScript代碼中聲明的原生處理程序處理,如View.OnClickListener,UIControl.addTarget。
為了避免開(kāi)發(fā)者需要對(duì)三個(gè)支持的平臺(tái)有深入的理解,該框架包含了一個(gè)抽象與原生代碼連接的NativeScript模塊層(NativeScript Modules Layer,NML), 可以自動(dòng)將JavaScript調(diào)用轉(zhuǎn)化為原生調(diào)用。NML包含如下模 塊:Application,Camera,Color,Console,Data,F(xiàn)ile System,HTTP,Imaging,Local Settings,Location,Timer,UI。開(kāi)發(fā)者并未受限于只能使用NML,也可以訪(fǎng)問(wèn)任意原生API。
NativeScript其它一些功能簡(jiǎn)單列示如下:
-
當(dāng)前支持平臺(tái):iOS7+,安卓4.2+。預(yù)計(jì)將在4月實(shí)現(xiàn)Windows Phone的支持。對(duì)安卓早期版本的支持也將很快到來(lái)。
-
iOS平臺(tái)的編譯可以在遠(yuǎn)程完成,無(wú)需Mac電腦或iOS工具
-
開(kāi)發(fā)工作可以在任意IDE中完成。
-
支持任意跨瀏覽器的JavaScript庫(kù)。
-
支持CSS。
-
支持MVVM。
-
即時(shí)支持新的原生平臺(tái)。
部分介紹來(lái)自 InfoQ
