## 原生開發與跨平臺技術
### 原生開發
原生應用程序是指某一個移動平臺(比如iOS或安卓)所特有的應用,使用相應平臺支持的開發工具和語言,并直接調用系統提供的SDK API。
原生開發有以下主要優勢:
* 可訪問平臺全部功能(GPS、攝像頭);
* 速度快、性能高、可以實現復雜動畫及繪制,整體用戶體驗好;
主要缺點:
* 平臺特定,開發成本高;不同平臺必須維護不同代碼,人力成本隨之變大;
* 內容固定,動態化弱,大多數情況下,有新功能更新時只能發版;
隨著移動互聯網高歌猛進,在很多業務場景中,傳統的純原生開發已經不能滿足日益增長的業務需求。主要表現在:
* 動態化內容需求增大;當需求發生變化時,純原生應用需要通過版本升級來更新內容,但應用上架、審核是需要周期的,這對高速變化的互聯網時代來說是很難接受的,所以,對應用動態化(不發版也可以更新應用內容)的需求就變的迫在眉睫。
* 業務需求變化快,開發成本變大;由于原生開發一般都要維護Android、iOS兩個開發團隊,版本迭代時,無論人力成本,還是測試成本都會變大。
根據原理,主要分為三類:
* H5 + 原生(Cordova、Ionic、微信小程序)
* JavaScript 開發 + 原生渲染 (React Native、Weex)
* 自繪UI + 原生 (Qt for mobile、Flutter)
## Hybrid技術簡介
### H5 + 原生
這類框架主要原理就是將 App 中需要動態變動的內容通過HTML5(簡稱 H5)來實現,通過原生的網頁加載控件WebView (Android)或 WKWebView(iOS)來加載(以后若無特殊說明,我們用WebView來統一指代 Android 和 iOS 中的網頁加載控件)。
H5 部分是可以隨時改變而不用發版,動態化需求能滿足;我們稱這種 **H5 + 原生** 的開發模式為**混合開發** 。
目前國內各家公司小程序應用層的開發技術棧是 Web 技術棧,而底層渲染方式基本都是 WebView 和原生相結合的方式。
### 混合開發技術點
混合開發中,H5代碼是運行在 WebView 中,而 **WebView** 實質上就是一個**瀏覽器內核**,其 JavaScript 依然運行在一個**權限受限的沙箱中**,所以對于**大多數系統能力都沒有訪問權限**,如無法訪問文件系統、不能使用藍牙等。所以,對于 H5 不能實現的功能,就需要原生去做了。
混合框架一般都會在原生代碼中預先實現一些訪問系統能力的 API , 然后暴露給 WebView 以供 JavaScript 調用。這樣一來,WebView 中 JavaScript 與原生 API 之間就需要一個通信的橋梁,主要負責 JavaScript 與原生之間傳遞調用消息,而消息的傳遞必須遵守一個標準的協議,它規定了消息的格式與含義,我們把依賴于 WebView 的用于在 JavaScript 與原生之間通信并實現了某種消息傳輸協議的工具稱之為 WebView JavaScript Bridge , 簡稱 **JsBridge**,它也是混合開發框架的核心。
### 總結
混合應用的優點是動態內容是 H5,Web 技術棧,社區及資源豐富,缺點是性能體驗不佳,對于復雜用戶界面或動畫,WebView 有時會不堪重任。
## React Native、Weex
JavaScript開發 + 原生渲染 的跨平臺框架原理。