最火移動端跨平臺方案盤點:React Native、weex、Flutter

2020-12-27 即時通訊技術分享

1、前言

跨平臺一直是老生常談的話題,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平臺框架的百花齊放,頗有一股推倒原生開發者的勢頭。

為什麼我們需要跨平臺開發? 本質上,跨平臺開發是為了增加代碼復用,減少開發者對多個平臺差異適配的工作量,降低開發成本,提高業務專注的同時,提供比web更好的體驗。嗯~通俗了說就是:省錢、偷懶。

目前移動端跨平臺開發中,備受關注的方案大致歸納為以下幾種情況:

1)react native、weex均使用JavaScript作為程式語言,目前JavaScript在跨平臺開發中,可謂佔據半壁江山,大有「一統天下」的趨勢;

2)kotlin-native開始支持 iOS 和 Web 開發,(kotlin已經成為android的一級語言)也想嘗試「一統天下」;

3)flutter是Google跨平臺移動UI框架,Dart作為谷歌的親兒子,毫無疑問Dart成為flutter的程式語言。作為巨頭新生兒,在flutter官網也可以看出,flutter同樣「心懷天下」(可支持Web端、Android端、iOS端等)。

本篇主要以react-native、weex、flutter,深入聊聊當前最火的這3種跨平臺移動開發方案的實現原理、現狀與未來。至於為什麼只講它們,因為對比ionic、phoneGap,它們更於 「naive」 ( )。看完本篇,相信你會對於當下跨平臺移動開發的現狀、實現原理、框架的選擇等有更深入的理解。

(本文同步發布於:http://www.52im.net/thread-1870-1-1.html)

2、React Native的原理與特性介紹

React Native技術關鍵詞:

1)Facebook 出品;2)JavaScript語言;3)JSCore引擎;4)React設計模式;5)原生渲染。

2.1 理念架構

「Learn once, write anywhere」 ,代表著 Facebook對 react native 的定義:學習 react ,同時掌握 web 與 app 兩種開發技能。 react native 用了 react 的設計模式,但UI渲染、動畫效果、網絡請求等均由原生端實現。開發者編寫的js代碼,通過 react native 的中間層轉化為原生控制項和操作,比ionic等跨平臺應用,大大提高了的用戶體驗。

總結起來其實就是:React Native是利用 JS 來調用 Native 端的組件,從而實現相應的功能。

如下圖所示,react native 的跨平臺是實現主要由三層構成,其中 C++ 實現的動態連結庫(.so),作為中間適配層橋接,實現了js端與原生端的雙向通信交互。這裡最主要是封裝了 JavaScriptCore 執行js的解析,而 react native 運行在JavaScriptCore中,所以不存在瀏覽器兼容的問題

其中在IOS上直接使用內置的javascriptcore, 在Android 則使用webkit.org官方開源的jsc.so。

2.2 實現原理

和前端開發不同:react native 所有的標籤都不是真實控制項,JS代碼中所寫控制項的作用,類似 Map 中的 key 值。JS端通過這個 key 組合的 Dom ,最後Native端會解析這個 Dom ,得到對應的Native控制項渲染,如 Android 中 標籤對應 ViewGroup 控制項。

在 react native 中,JS端是運行在獨立的線程中(稱為JS Thread )。JS Thread 作為單線程邏輯,不可能處理耗時的操作。那麼如 fetch 、圖片加載 、 數據持久化 等操作,在 Android 中實際對應的是 okhttp 、Fresco 、SharedPreferences等。而跨線程通信,也意味著 Js Thread 和原生之間交互與通訊是異步的。

可以看出,react native 跨平臺的關鍵在於C++層,開發人員大部分時候,只專注於JS 端的代碼實現。 在原生端提供的各種 Native Module 模塊(如網絡請求,ViewGroup控制項),和 JS 端提供的各種 JS Module(如JS EventEmiter模塊),都會在C++實現的so中保存起來,雙方的通訊通過C++中的保存的映射,最終實現兩端的交互。通信的數據和指令,在中間層會被轉為String字符串傳輸,雙向的調用流程如下圖。

2.3 打包加載

最終:JS代碼會被打包成一個 bundle 文件,自動添加到 App 的資源目錄下。react native 的打包腳本目錄為/node_modules/react-native/local-cli,打包最後會通過 metro 模塊壓縮 bundle 文件。而bundle文件只會打包js代碼,自然不會包含圖片等靜態資源,所以打包後的靜態資源,其實是被拷貝到對應的平臺資源文件夾中。

其中圖片等存在資源的映射規則,比如放在 react native 項目根目錄下的 img/pic/logo.png 的資源,編譯時,會被重命名後,根據大小 merged 到對應的是drawable目錄下,修改名稱為img_pic_logo.png。

打包Android和IOS,肯定需要相應的平臺項目存在,在 react-native init 時創建的項目,就已經包含了 android 和 ios 的模版工程,打包完的工程會加載bundle文件,然後啟動項目,如下圖。這裡就不展開了,有興趣的可以看QQ空間移動開發團隊分享的《React Native For Android 架構初探》。

▲ react native完成啟動流程圖(圖片來源於QQ空間移動開發團隊)

3、WEEX的原理與特性介紹

WEEX技術關鍵詞:

1)Alibaba 出品;2)JavaScript語言;3)JS V8引擎;4)Vue設計模式;5)原生渲染。

3.1 理念架構

「Write once, run everywhere」:weex的定義就像是:寫個 vue 前端,順便幫你編譯成性能還不錯的 apk 和 ipa(當然,現實有時很骨感)。基於 Vue 設計模式,支持 web、android、ios 三端,原生端同樣通過中間層轉化,將控制項和操作轉化為原生邏輯來提高用戶體驗。

在 weex 中,主要包括三大部分:JS Bridge、Render、Dom,分別對應WXBridgeManager、WXRenderManager、WXDomManager,三部分通過WXSDKManager統一管理。其中 JS Bridge 和 Dom 都運行在獨立的 HandlerThread 中,而 Render 運行在 UI 線程。

JS Bridge 主要用來和 JS 端實現進行雙向通信,比如把 JS 端的 dom 結構傳遞給 Dom 線程。Dom 主要是用於負責 dom 的解析、映射、添加等等的操作,最後通知UI線程更新。而 Render 負責在UI線程中對 dom 實現渲染。

3.2 實現原理

和 react native一樣——weex 所有的標籤也不是真實控制項,JS 代碼中所生成存的 dom,最後都是由 Native 端解析,再得到對應的Native控制項渲染,如 Android 中 標籤對應 WXTextView 控制項。

weex 中文件默認為 .vue ,而 vue 文件是被無法直接運行的,所以 vue 會被編譯成 .js 格式的文件,Weex SDK會負責加載渲染這個js文件。Weex可以做到跨三端的原理在於:在開發過程中,代碼模式、編譯過程、模板組件、數據綁定、生命周期等上層語法是一致的。不同的是在 JS Framework 層的最後,web 平臺和 Native 平臺,對 Virtual DOM 執行的解析方法是有區別的。

實際上,在 Native 中對 bundle 文件的加載大致經歷以下階段:

1)weex 接收到 js 文件以後,JS Framework 根據文件為 Vue 模式,會調用weex-vue-framework 中提供的 createInstance方法創建實例。(也可能是Rax模式);

2)createInstance 中會執行 Js Entry 代碼裡 new Vue() 創建一個組件,通過其 render 函數創建出 Virtual DOM 節點;

3)由JS V8 引擎上解析 Virtual DOM ,得到 Json 數據發送至 Dom 線,這裡輸出 Json 也是方便跨端的數據傳輸;

4)Dom 線程解析 Json 數據,得到對應的 WxDomObject,然後創建對應的WxComponent 提交 Render;

5)Render在原生端最終處理處理渲染任務,並回調裡JS方法。

得益於上層的統一性,只是通過 weex-vue-framework 判斷是由Vue.js 生成真實的 Dom ,還是通過 Native Api 渲染組件,weex 一定程度上上,用JS 實現了 vue 一統天下的效果。

weex 在原生渲染 Render 時,在接收到渲染指令後,會逐步將數據渲染成原生組件。Render 通過解析渲染數據的描述,然後分發給不同的模塊。

比如:控制項渲染屬於 dom 模塊中,頁面跳轉屬於navigator模塊等。模塊的渲染過程並非一個執行完,再執行另一個的流程,而是類似流式的過程。如上一個 的組件還沒渲染好,下一個

的渲染又發了過來。這樣當一個組件的嵌套組件很多時,或者可以看到這個大組件內的UI,一個一個渲染出來的過程。

weex 比起react native,主要是在JS V8的引擎上,多了 JS Framework 承當了重要的職責,使得上層具備統一性,可以支持跨三個平臺。

總的來說JS Framework主要負責的是:

1)管理Weex的生命周期;

2)解析JS Bundle,轉為Virtual DOM,再通過所在平臺不同的API方法構建頁面;

3)進行雙向的數據交互和響應。

3.3 打包

weex 作為 react-native 之後出現的跨平臺實現方案,自然可以站在前人的肩膀上優化問題,比如:Bundle文件過大問題。

Bundle文件的大小,很大程度上影響了框架的性能,而 weex 選擇將 JS Framework 集成到 WeexSDK 中,一定程度減少了JS Bundle的體積,使得 bundle 裡面只保留業務代碼。

打包時,weex 是通過 webpack 打包出 bundle 文件的。bundle 文件的打包和 entry.js 文件的配置數量有關,默認情況下之後一個 entry 文件,自然也就只有一個bundle文件。

在 weex 項目的 webpack.common.conf.js 中可以看到,其實打包也是區分了 webConfig 和 weexConfig 的不同打包方式。如下圖,其中weexEntry 就是 weex 打包配置的地方,可以看到本來已經有 index 和 entry.js 存在了。如果有需要,可配置上你需要的打包頁面,具體這裡就不詳細展開了。有興趣可看《Weex原理之帶你去蹲坑》。

4、Flutter的原理與特性介紹

Flutter技術關鍵詞:

1)Google 出品;2)Dart語言;3)Flutter Engine引擎;4)響應式設計模式;5)原生渲染。

Flutter 是谷歌2018年發布的跨平臺移動UI框架。相較於本人已經在項目中使用過 react native 和 Weex,Flutter目前僅僅是簡單運行過Demo,畢竟還是beta 階段,這裡更多的聊一下它的實現機制和效果。

與 react native 和 weex 的通過 Javascript 開發不同,Flutter 的程式語言是Drat,所以執行時並不需要 Javascript 引擎,但實際效果最終也通過原生渲染。

如上圖,Flutter 主要分為 Framework 和 Engine,我們基於Framework 開發App,運行在 Engine 上。Engine 是 Flutter 的獨立虛擬機,由它適配和提供跨平臺支持,目前猜測 Flutter 應用程式在 Android 上,是直接運行 Engine 上 所以在是不需要Dalvik虛擬機(這是比kotlin更徹底,拋棄JVM的糾纏?)

如下圖,得益於 Engine 層,Flutter 甚至不使用移動平臺的原生控制項, 而是使用自己 Engine 來繪製 Widget (Flutter的顯示單元),而 Dart 代碼都是通過 AOT 編譯為平臺的原生代碼,所以 Flutter 可以 直接與平臺通信,不需要JS引擎的橋接。同時 Flutter 唯一要求系統提供的是 canvas,以實現UI的繪製。咦?這麼想來,支持web端也沒問題吧!

在Flutter中,大多數東西都是widget,而widget是不可變的,僅支持一幀,並且在每一幀上不會直接更新,要更新而必須使用Widget的狀態。無狀態和有狀態 widget 的核心特性是相同的,每一幀它們都會重新構建,有一個State對象,它可以跨幀存儲狀態數據並恢復它。

Flutter 上 Android 自帶了 Skia,Skia是一個 2D的繪圖引擎庫,跨平臺,所以可以被嵌入到 Flutter的 iOS SDK中,也使得 Flutter Android SDK要比 iOS SDK小很多。

熱門話題:為什麼Flutter會選擇 Dart作為開發語言?

八卦消息認為:「是因為 Drat 項目組就在 Flutter 隔壁而被選上」。

實際上真實的原因是:早期的Flutter團隊評估了十多種語言,並選擇了Dart,因為它符合他們構建用戶界面的方式。

Dart之所以成為Flutter不可或缺的一部分,根本原因還是因為其具有以下特性:

1)Dart是AOT(Ahead Of Time)編譯的,編譯成快速、可預測的本地代碼,使Flutter幾乎都可以使用Dart編寫。這不僅使Flutter變得更快,而且幾乎所有的東西(包括所有的小部件)都可以定製;

2)Dart也可以JIT(Just In Time)編譯,開發周期異常快,工作流顛覆常規(包括Flutter流行的亞秒級有狀態熱重載);

3)Dart可以更輕鬆地創建以60fps運行的流暢動畫和轉場。Dart可以在沒有鎖的情況下進行對象分配和垃圾回收。就像JavaScript一樣,Dart避免了搶佔式調度和共享內存(因而也不需要鎖)。由於Flutter應用程式被編譯為本地代碼,因此它們不需要在領域之間建立緩慢的橋梁(例如,JavaScript到本地代碼)。它的啟動速度也快得多;

4)Dart使Flutter不需要單獨的聲明式布局語言,如JSX或XML,或單獨的可視化界面構建器,因為Dart的聲明式編程布局易於閱讀和可視化。所有的布局使用一種語言,聚集在一處,Flutter很容易提供高級工具,使布局更簡單;

5)開發人員發現Dart特別容易學習,因為它具有靜態和動態語言用戶都熟悉的特性。

並非所有這些功能都是Dart獨有的,但它們的組合卻恰到好處,使Dart在實現Flutter方面獨一無二。因此,沒有Dart,很難想像Flutter像現在這樣強大。

有關此話題的詳細文章請見《為什麼Flutter會選擇 Dart ?》。

5、React Native、weex、Flutter 3種方案橫向對比

這算是互相傷害的環節了吧。(///▽///)

5.1 最終程序大小

以Android平臺為例,上面Apk大小是通過 react-native init、weex create 和 flutter 創建出的工程後,直接不添加任何代碼,打包出來的 release 籤名 apk 大小。從下圖可以看出,其中大比例都是在so庫。

5.2 社群支持

react native 作為 Facebook 主力開源項目之一,至今已有各類豐富的第三方庫,甚至如 realm、lottie 等開源項目也有 react native 相關的版本,社群實際無需質疑。當然,因為並完全正統開發平臺,第三庫的健壯性和兼容性有時候總是良莠不齊。

weex 其實有種生錯在國內的感覺。其實 weex 的設計和理念都很優秀,性能也不錯,但是對比 react native 的第三方支持,就顯得有點後媽養的。2016年開源至今,社區和各類文檔都顯得有點疲弱,作為跨平臺開發人員,大多時候肯定不會希望,需要頻繁的自己增加原生功能支持,因為這樣的工作一多,反而會與跨平臺開發的理念背道而馳,帶來開發成本被維護難度增加。

Flutter 目前還處理beta階段,但是谷歌的號召力一直很可觀,這一點無需質疑。

5.3 性能區別

理論上 flutter 的性能應該是最好的,但是目前實際體驗中,卻並沒有感受出來太大的差距,和 react native(0.5.0之後)、weex 在性能上個人體驗差異不是很大。當然,這裡並沒有實測渲染的毫秒時間和幀率數據。

5.4 其他區別

Weex的多頁面實現問題:

weex 在 native 端是不支持 的,這一點和 react-native 不同在與,如果在 native 需要實現頁面跳轉,使用 vue-router 將會慘不忍睹:返回後頁面不做特別處理時,是會空白一片。參考官方Demo playground,native 端 的採用 weex.requireModule('navigator') 跳轉 Activity 是才正確實現。

同時,weex中 navigator 跳轉的設計,也導致了多頁面的頁面間通訊的差異。weex在多頁面下的數據通訊,是通過url實現的,比如file://assets/dist/SecondPage.js?params=0,而vuex和vue-router在跨頁面是無法共用的;而 react native 在跨 Actvity 使用時,因為是同一個bundle文件,只要 manager 相同,那麼 router 和 store 時可以照樣使用的,數據通信方式也和當個 Actvity 沒區別。

項目模板:

weex 和 react native 模板代碼模式也不同。weex 的模板是從 cordova 模式修改過來的,根據platform需求,用命令添加固定模塊,而在 .gitignore 對 platforms 文件夾是忽略跟蹤。 react native 在項目創建時模版就存在了,特別是添加第三方插件原生端支持時,會直接修改模板代碼,git代碼中也會添加跟蹤修改。

6、未來趨勢展望

我們選擇框架的時候,很多時候會關注框架的成熟度和生命力不是麼()。

6.1 React Native

「Airbnb 宣布放棄使用 React Native,回歸使用原生技術」 : Airbnb 作為 react native 平臺上最大的支持者之一,其開源的lottie 同樣是支持原生和 react native。

Airbnb 在宣布放棄的文中,也對 react native 的表示了很大量的肯定,而使得他們放棄的理由,其實主要還是集中於項目龐大之後的維護困難,第三方庫的良莠不齊,兼容上需要耗費更多的精力導致放棄。

ps: Lottie庫Airbnb出的是一個能夠幫助解析AE導出的包含動畫信息的json文件。這很好的解決了一個矛盾,設計師可以更專注的設計出各種炫酷的動畫效果,而開發只需要將其加入支持即可。

Facebook 正在重構 React Native,將重寫大量底層。在經歷了開源協議風波後,可以看出 Facebook 對於 react native 還是很看重的。

這些底層重構優化的地方,主要集中於:

1)首先:改變線程模型。UI 更新不再需要在三個不同的線程上執行,而是可以在任意線程上同步調用 JavaScript 進行優先更新,同時將低優先級工作推出主線程,以便保持對 UI 的響應;

2)其次:將異步渲染功能引入 React Native 中,允許執行多個渲染並簡化異步數據處理;

3)最後:簡化橋接,讓它更快、更輕量。原生和 JavaScript 之間的直接調用效率更高,並且可以更輕鬆地構建調試工具,如跨語言堆棧跟蹤。

其他React Native相關文章:

從Android到React Native開發(一、入門)

從Android到React Native開發(二、通信與模塊實現)

從Android到React Native開發(三、自定義原生控制項支持)

從Android到React Native開發(四、打包流程和發布為Maven庫)

6.2 Weex

沒有死!阿里公開Weex技術架構,還開源了一大波組件。 2018年初的新聞可以看出,weex 的遭遇有點類似曾經的 Duddo(Dubbo因為內部競爭被阿里一度放棄維護),這波詐屍後 weex 被託管到了Apache,而github的 weexteam 如今也還保持著更新,希望後續能有多好的發展,拭目以待吧。

6.3 Flutter

Flutter 是 Google 跨平臺移動UI框架,Dart作為谷歌的親兒子在 Flutter 中使用,並且谷歌新作業系統 Fuchsia 支持 Dart,使用 Flutter 作為操作UI框架。這些集合到一起難免讓你懷疑 Android 是否要被谷歌拋棄的想法。

或者如今先 Android 等平臺上推廣 Flutter 與 Dart,就是為了以後跟好的過渡到新系統上,畢竟開發者是作業系統的生命源泉之一。而 Java 與 JVM 或者可以被谷歌完全拋開。當然,目前看起來 Flutter 貌似還缺少一些語法糖,嵌套下來的代碼有點不忍直視,或者到正式版之後,我們更能感受出它的美麗吧。

(原文連結:https://www.jianshu.com/p/7e0bd4708ba7,內容有改動)

附錄:更多移動端開發精華文章

《通俗易懂,理解行動網路的「弱」和「慢」》《史上最全移動弱網絡優化方法總結》《從客戶端的角度來談談移動端IM的消息可靠性和送達機制》《現代移動端網絡短連接的優化手段總結:請求速度、弱網適應、安全保障》《騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路》《QQ音樂團隊分享:Android中的圖片壓縮技術詳解(上篇)》《QQ音樂團隊分享:Android中的圖片壓縮技術詳解(下篇)》《騰訊原創分享(一):如何大幅提升行動網路下手機QQ的圖片傳輸速度和成功率》《騰訊原創分享(二):如何大幅壓縮行動網路下APP的流量消耗(上篇)》《騰訊原創分享(三):如何大幅壓縮行動網路下APP的流量消耗(下篇)》《基於社交網絡的Yelp是如何實現海量用戶圖片的無損壓縮的?》《騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(圖片壓縮篇)》《騰訊技術分享:騰訊是如何大幅降低帶寬和網絡流量的(音視頻技術篇)》《為什麼說即時通訊社交APP創業就是一個坑?》《字符編碼那點事:快速理解ASCII、Unicode、GBK和UTF-8》《全面掌握移動端主流圖片格式的特點、性能、調優等》《最火移動端跨平臺方案盤點:React Native、weex、Flutter》>> 更多同類文章 ……

(本文同步發布於:http://www.52im.net/thread-1870-1-1.html)

相關焦點

  • Flutter 會不會被蘋果限制其發展?
    這個可能性是存在的,而且不止是 flutter、react-native 、weex 、uni-app 、taro 、Hippy等都存在這個風險,雖然有些框架對比起 flutter 其他框架存在時間稍長,但是這不可否認它們一直都存在這個風向。
  • ReactNative學習資源大匯集
    /facebook/react-native/tree/master/ExamplesFacebook F8 App https://github.com/fbsamples/f8appGitHub Popular(一個用來查看GitHub最受歡迎與最熱項目的App)已上架https://github.com/crazycodeboy/GitHubPopular
  • 阿里宣布開源 Weex,用 Web 方式開發 Native 性能體驗應用
    Weex能夠完美兼顧性能與動態性,讓移動開發者通過簡捷的前端語法寫出Native級別的性能體驗,並支持iOS、安卓、YunOS及Web等多端部署。對於移動開發者來說,Weex主要解決了頻繁發版和多端研發兩大痛點,同時解決了前端語言性能差和顯示效果受限的問題。開發者可通過Weex官網申請內測。(http://alibaba.github.io/weex/)
  • APP跨平臺開發技術(Flutter VS React Native)分析
    Flutter 是 Google 新推出的一款幫助開發者開發高質量原生應用的全新APP跨平臺 UI 框架,它的目標是解決了移動開發中跨平臺、高性能問題,一經推出就受到開發者的廣泛關注。下面將介紹幾大流行的跨平臺開發技術,並從使用成本、開發效率、一致性、動態性和性能等方面作更深入的分析,提供更具體的參考。
  • 推薦11 款 React Native 開源移動 UI 組件
    攝像機視圖 react-native-camerareact-native-camera 是 React Native 的攝像頭 viewport。這個模塊應用於開發的早期階段,它支持攝像頭的轉換和基本圖片捕捉。
  • 十大最受歡迎的 React Native 應用開發編輯器
    而在隨後從事 React Native 開發工作過程中,對相應的編輯器做了一些探索和研究,本文總結了一些非常適合移動應用開發的編輯器和 IDE。1.Atom 常用的包atom-react-native-autocomplete package - 該包針對 React-Native,為 Atom 編輯器提供自動補全功能。atom-react-native-css - 這是一個內置支持 SASS、SCSS 的 React-Native 組件的包。
  • 如何用 React Native 開發一款電商 App?
    編者按:React Native愈發火爆,如果你尚未接觸過,不如看看本文作者的入門指南,他會帶你體驗基於RN平臺開發一款電子商務搜索類App的奇妙旅程!本文編譯自Hackernoon,原文標題為:Building an e-commerce search app with react native,推薦有一定編程基礎的讀者閱讀。
  • 聊聊React Native屏幕適配那些事兒
    '#4A4A4A',    fontSize: 13,    lineHeight: 20,//邏輯像素    marginLeft: 25,    marginRight: 25,  },一比例設備邏輯像素寬度比例為了更好的視覺與用戶操作體驗,目前流行的移動端適配方案
  • React Native 開發日常、常見問題總結及解決
    一、建議 看法:個人覺得 APP 開發性能 Flutter > React Native > Weex難度:Flutter > React Native > Weex 有點尷尬:Flutter 學習姿勢可點擊之前文章 一星期從入門到實際開發經驗分享及總結後續:後續這篇應該沒有更新了;目前已轉戰至 Flutter, Flutter 系列問題可查看我之前文章二、React Native 優點: 1、android、ios 端能保持
  • Facebook 發布 React Native for Android
    開發技術擴展到了 Google 的流行移動平臺。React Native 讓開發者使用 JavaScript 和 React 編寫應用,利用相同的核心代碼就可以創建 Web,iOS 和 Android 平臺的原生應用。React Native 的宗旨是,學習一次,高效編寫跨平臺原生應用。
  • 用JavaScript開發移動原生應用,Facebook正式開源React Native!
    通過React Native,開發者可以使用UITabBar、UINavigationController等標準的iOS平臺組件,讓應用界面在其他平臺上亦能保持始終如一的外觀、風格。var React = require('react-native'); var { TabBarIOS, NavigatorIOS } = React; var App = React.createClass({ render: function
  • React Native實戰:配置和起步
    Facebook開源React Native也勢要統一移動端程式語言,而其提前發布React Native for Android更是引得國內外開發者一眾熱捧
  • Flutter doctor 命令,解決Flutter開發環境疑難雜症,建議收藏
    技術剛剛好經歷近幾年,移動端跨平臺開發技術層出不窮,從Facebook家的ReactNative,到阿里家WEEX,前端技術在移動端跨平臺開發中大展身手,技術剛剛好作為一名Android開發,經歷了從Reactjs到Vuejs的不斷學習。而在2018年,我們的主角變成了Flutter,這是Goolge開源的一個移動端跨平臺解決方案,可以快速開發精美的移動App。
  • 5分鐘學會Flutter開發
    ,支持移動、Web、桌面和嵌入式平臺。/.android/include_flutter.groovy' // new))include ':native_add_flutter'project(':native_add_flutter').projectDir = new File('..
  • 怎麼理解React Native的新架構?
    npx create-react-native-library react-native-simple-jsi前面的步驟更多的是在配置一些模塊的信息,值得注意的是在選擇模塊的開發語言時要注意,這邊是支持很多種類型的,針對原生端開發我們用 Java&OC 比較多,也可以選擇純 JS 或者 C++ 的類型,大家根據自己的實際情況來選擇,完成後需要選擇是 UI 模塊還是
  • Flutter 移動端屏幕採集方案分享
    作者 | 派大星星星星 來源 | 掘金,點擊閱讀原文查看作者更多文章https://juejin.cn/post/6897134377202499598現如今隨著 Flutter 的應用越來越廣泛,純 Flutter 項目也越來越多,本篇內容主要分享的是 Flutter 移動端
  • React Native 從入門到原理
    從本質上來說,移動端和服務端約定了一套協議,但是協議內容嚴重依賴於應用內要展示的內容,不利於拓展。也就是說,如果業務要求頻繁的增加或修改頁面,這套協議很難應付。最重要的是,JSON 只是一種數據交換的格式,說白了,我們就是在解析文本數據。這就意味著它只適合提供一些配置信息,而不方便提供邏輯信息。
  • 分享 50 個完整的 React Native 項目
    下面直奔主題↓↓↓項目名稱:react-native-eyepetizer項目地址:https://github.com/MarnoDev/react-native-eyepetizer項目簡介:模仿開眼
  • 通過與React的簡單對比來入門Flutter
    作者 | ELab.lijianye出品 | ELab團隊(ID:gh_b1857b91fe44)Flutter簡介Flutter是谷歌開源的移動端應用開發框架,採用Dart語言作為開發語言,主要的特點是跨平臺,高性能,高保真。
  • ReactNative 的組件架構設計
    【編者按】本篇作者 @cnsnake11,寫的是 react native 的架構設計,如果你用 react