說在前面:
? ? ? ?本屌是一名 Android APP開發(fā)者,從大學畢業(yè)開始一直都是與原生app打交道,前幾年Android在市場上大火,需求也是很多,本屌混的也順風順水,好不得意。
? ? ? 然而最近幾年隨著小程序,web,APP端各種端大行其道,又恰逢互聯(lián)網(wǎng)寒冬,各個公司都在節(jié)約成本,以前一個項目Android,IOS都會有相應(yīng)的開發(fā)人員,現(xiàn)在公司都要求人員會跨平臺開發(fā),以前2個人干的多端活,現(xiàn)在1個人干多端,只會原生app開發(fā)那一套已經(jīng)行不通了,本屌心里那個慌啊,各位看官心里慌不慌?多端統(tǒng)一開發(fā)已是大勢所趨,趁著現(xiàn)在還能動(已經(jīng)三十而立了),趕緊多學一些吧。。。
? ?公司最近的項目要求在Android,IOS,小程序上同時運行,前端開發(fā)人員僅本屌一人,為了完成任務(wù),將最近前端所涉及的技術(shù)框架都做了一個調(diào)查,也進行了實踐,現(xiàn)在將自己的歷程分享出來,供大家參考,由于能力有限,歡迎大家對錯誤的地方進行指正。
一、原生開發(fā)與跨平臺開發(fā)技術(shù)
原生開發(fā)
原生開發(fā)就是用原生sdk api(Android或IOS)進行開發(fā),Android使用Java或Kotlin,IOS使用Objective-C或Swift。
原生開發(fā)優(yōu)勢:
1.速度快、性能高,可實現(xiàn)復(fù)雜的動畫,整體用戶體驗好;
2.可以訪問平臺的全部功能,包括硬件(藍牙,GPS,拍照,攝像等)
主要缺點
1.平臺特定,開發(fā)成本高,不同平臺需要維護不同代碼
2.動態(tài)化弱,有新功能需及時發(fā)版
?總結(jié)一下,純原生開發(fā)主要面臨動態(tài)化和開發(fā)成本兩個問題,而針對這兩個問題,誕生了一些跨平臺的動態(tài)化框架。
跨平臺開發(fā)
市場上跨平臺方案比較多,主要分為三類
1.H5+原生(uni-app,appcan,Cordova,Ionic等)
2.JavaScript開發(fā)+原生渲染(React Native、Weex)
3.自繪UI+原生(flutter)
? ? ?h5+原生的開發(fā)模式為混合開發(fā)?,采用混合模式開發(fā)的APP我們稱之為混合應(yīng)用或Hybrid APP?,如果一個應(yīng)用的大多數(shù)功能都是H5實現(xiàn)的話,我們稱其為Web APP 。
? ? ? 混合應(yīng)用的優(yōu)點是動態(tài)內(nèi)容是H5,web技術(shù)棧,社區(qū)及資源豐富,缺點是性能不好,對于復(fù)雜用戶界面或動畫,webview不堪重任。
下面列舉自己在項目中選型所涉及的幾個跨平臺框架
先來一張自己總結(jié)的表格,供大家參考:

下面詳情講解一下:
一、flutter (可跨Android和IOS)
? ? ? ?Flutter 是 Google推出并開源的移動應(yīng)用開發(fā)框架,主打跨平臺、高保真、高性能。開發(fā)者可以通過 Dart語言開發(fā) App,一套代碼同時運行在 iOS 和 Android平臺。 Flutter提供了豐富的組件、接口,開發(fā)者可以很快地為 Flutter添加 native擴展。
優(yōu)勢:
1.跨平臺自繪引擎,性能強大,流暢:對比weex和react native,性能的強大是很明顯的,基于dom樹渲染原生組件,很難與直接在原生視圖上繪圖比肩性能,Google作為一個輪子大廠,直接在兩個平臺上重寫了各自的UIKit,對接到平臺底層,減少UI層的多層轉(zhuǎn)換,UI性能可以比肩原生,這個優(yōu)勢在滑動和播放動畫時尤為明顯
2.采用Dart語言開發(fā):開發(fā)效率高,高性能,快速內(nèi)存分配,類型安全
3.已發(fā)布正式版本,google投入資源大,后期會做大做強。
缺點:
1.部分場景仍需原生開發(fā)。
注:通過對flutter的學習,感覺還是很不錯的,dart學習成本很低,幾乎可以不用怎么學,通過實踐,2周時間足夠可以開始動手擼代碼。
二、React Native(可跨Android和IOS)
? ? ? ?使用Javascript語言,類似于HTML的JSX,以及CSS來開發(fā)移動應(yīng)用,將虛擬DOM映射為原生控件,因此熟悉Web前端開發(fā)的技術(shù)人員只需很少的學習就可以進入移動應(yīng)用開發(fā)領(lǐng)域。
其優(yōu)勢和缺點網(wǎng)上文章很多,這里就不做敘述。談?wù)勛约涸趯嵺`中遇到的問題:
1.學習成本太高,對沒有React前端技術(shù)的同學來說,上手是很不容易的,本屌搭建環(huán)境都用了2天時間
2.開發(fā)過程中總遇到一些莫名其妙的問題,可能是學藝不精,最終一個星期后終于放棄該方案。
3.據(jù)查詢的資料顯示,很多公司由于各種原因已經(jīng)放棄React Native ,而且很多大神也表示放棄RN是業(yè)內(nèi)的共識,至于共識的原因哪位同學知道,可以分享一下。
三、Taro(可跨H5,小程序,React Native)
京東 - 凹凸實驗室打造的一套遵循 React 語法規(guī)范的多端統(tǒng)一開發(fā)框架,github上已超過16K的star。詳情參考?https://github.com/NervJS/taro
? ?taro多端統(tǒng)一開發(fā)框架,支持用 React 的開發(fā)方式編寫一次代碼,生成能運行在微信/百度/支付寶/字節(jié)跳動小程序、H5、React Native 等的應(yīng)用。
觀點:
由于Taro編寫出來的工程,如果打包成IOS和Android 需要先將程序生成React Native ,然后再有RN來打包IOS和Android。由于RN的一些經(jīng)歷,本屌未嘗試,直接放棄該方案。有同學嘗試過的可以分享一下過程。
四、uni-app(可跨Android、IOS、H5、各種小程序)
uni-app?是一個使用?Vue.js?開發(fā)跨平臺應(yīng)用的前端框架,開發(fā)者編寫一套代碼,可編譯到iOS、Android、H5、小程序等多個平臺,可參看官網(wǎng)?https://uniapp.dcloud.io/
由于公司的項目需要Android,IOS和小程序共存,最終選擇該方案,目前已完成項目,下面說說自己的看法
1. 學習成本很低,雖然之前沒接觸過vue,但是上手很快,1天時間看vue語法,1天時間了解uniapp并對其創(chuàng)建-打包整個過程進行熟悉,然后第三天可以開始擼代碼,一個多星期就完成公司的項目,一款涉及30多個頁面的應(yīng)用。
2.提供云打包和本地打包,對沒有蘋果電腦的人是福音,可以使用云打包進行蘋果ipa制作,當然前提是上傳代碼到云端,如果代碼怕泄露那就本地打包
3.uni-app里面集成了5+plus,nvue和weex功能,所以對熟悉weex的同學也能滿足
4.項目運行性能良好,由于應(yīng)用是一些常規(guī)應(yīng)用,整體和原生體驗相差不大
5.國產(chǎn)開源,群比較活躍,遇到問題可以直接咨詢?nèi)汗芾?/p>
當然缺點也有:
1.對于大量圖片展示、tab滑動上卡頓有些明顯
2.對地圖方面支持力度不夠,有很多bug,對于定位,地圖選擇位置,圖層繪制簡單的氣泡這些基本功能都提供的有接口,使用起來還是很方便的
3.存在部分bug,比如手機震動,提供的接口不起效果,但是可以使用5+ 代碼進行實現(xiàn)。
最后:
? ? ?現(xiàn)階段只懂原生開發(fā)已經(jīng)很難立足市場,現(xiàn)在都是多端開發(fā)??缍丝梢钥紤]flutter和uni-app這兩個框架,前者是原生渲染速度快,可跨Android和IOS兩端開發(fā)。后者是web渲染,可以跨Android,IOS,小程序,h5多端,缺點是性能問題。但對常規(guī)應(yīng)用,性能表現(xiàn)還不錯。剛用uniapp完成公司的項目,性能表現(xiàn)挺好。
? ?七分精力在原生,三分精力留給跨平臺,最后希望各位提出意見,一起溝通學習。