05_Flutter跨平臺初探

Flutter跨平臺初探

????Flutter一路了解下來冯丙,令人欣喜又贊嘆肉瓦。它可以跨越6個平臺,從桌面操作系統(tǒng)Windows胃惜、Linux、Mac OS船殉,到Web開發(fā)鲫趁,再到移動操作系統(tǒng)IOS、Android利虫“ず瘢跨越的廣度堡僻,前所未有。這讓人想起Java那句名言:"Write only once疫剃,Run anywhere"钉疫。在桌面操作系統(tǒng)上,Java基本實現(xiàn)了它的豪言壯語巢价。但自從sun被oracle收購后牲阁,并沒有再進一步。而Flutter似乎開啟了新的跨平臺紀元壤躲。雖然從目前來看城菊,各種生態(tài)還有待發(fā)展,性能也有待提高碉克,但前途星光燦爛凌唬,迸發(fā)著萬丈光芒。本文將重點從Android平臺的視角出發(fā)進行一些介紹棉胀。

(1)綜述

????Flutter使用Dart作為開發(fā)語言法瑟。Dart是一個現(xiàn)代的、靜態(tài)編譯的唁奢、面向?qū)ο蟮某绦蛟O(shè)計語言霎挟。語法風(fēng)格和Java非常的相似,比Kotlin更像Java多了麻掸。但這里對它不再過多介紹酥夭。
????Flutter其實是一個2D UI框架。在底層脊奋,它通過libflutter.so庫來繪制界面熬北。它并不使用Android 的View體系。Flutter的界面核心類是FlutterView诚隙,繼承自SurfaceView讶隐,通過native的方式進行UI繪制。Flutter只使用一個FlutterActivity久又,并管理著所有的路由(頁面)巫延。觸摸事件、手勢處理地消、消息傳遞炉峰,都由Flutter自己管理。它不使用xml這種構(gòu)建UI的方式脉执,而是通過Dart語言來描述Widget樹疼阔。它的國際化有很大的缺陷,官方目前推薦在代碼中用static final字符串來處理,可以說是一種非常糟糕的方式婆廊。也聽說有第三方dart庫可以解決這個問題迅细,但并未深入了解,這里就暫不多說否彩。

(2)主要目錄結(jié)構(gòu)

????Flutter Project可以通過flutter相關(guān)命令來創(chuàng)建疯攒,也可以通過AndroidStudio或者IDEA來創(chuàng)建。下面是它的主要目錄:

  • android:一個android Project主目錄列荔;
  • ios:一個ios Project主目錄敬尺,可以通過mac Xcode打開;
  • linux:linux平臺目錄贴浙;
  • macos:mac os平臺目錄砂吞;
  • web:web平臺目錄;
  • windows:windows平臺目錄崎溃;
  • lib:跨平臺的精髓蜻直,UI繪制、跨平臺代碼等都在這里袁串。

????lib下是跨平臺的內(nèi)容概而,其他各個目錄是平臺相關(guān)的內(nèi)容。從lib這個名稱可以看出囱修,它是作為一個庫被各個平臺使用的赎瑰。

(3)Flutter 插件

????Flutter插件,是用來解決平臺相關(guān)問題的一種方案破镰。它是和平臺緊密相關(guān)的庫餐曼。在Android平臺,插件的代碼是由Java或者Kotlin編寫的鲜漩,最終會被打包進apk中源譬。IOS平臺也類似。某些和平臺相關(guān)的功能孕似,如果Flutter不能自己實現(xiàn)踩娘,也沒有可用的插件,那么需要自己分平臺實現(xiàn)喉祭。這會涉及到平臺與Flutter的通信养渴,它通過MethodChannel來支持。

(4)Flutter限制

????Flutter跨越這么多的平臺臂拓,有它的限制所在。以下是一些總結(jié):
????可以跨平臺的:

  • 2D UI习寸,UI在主線程中更新的(通常都是胶惰,SurfaceView、TextureView例外) 霞溪;
  • 網(wǎng)絡(luò)請求孵滞、簽名加密中捆、Json序列化;
  • 圖片坊饶、文本資源的處理泄伪;
  • 文件操作;
  • 國際化匿级,雖然很糟糕蟋滴,但也算支持;
  • 基本的動畫痘绎,如平移津函、旋轉(zhuǎn)、縮放孤页、Alpha等尔苦;
  • 屏幕相關(guān)及資源適配;

????不能跨平臺的行施,這里包括需要平臺插件的允坚,或者需要和平臺相互通信處理的,如下:

  • 跳轉(zhuǎn)到其他App蛾号,從其他App跳入稠项;
  • Service、BroadcastReceiver须教、ContentProvider相關(guān)皿渗;
  • 危險權(quán)限申請?zhí)幚恚?/li>
  • WebView相關(guān);
  • JNI相關(guān)轻腺;
  • 與JS的交互相關(guān)乐疆;
  • 多媒體相關(guān),如音樂播放贬养、視頻播放等挤土;
  • 系統(tǒng)服務(wù)相關(guān),如震動误算、通知等仰美;
  • 數(shù)據(jù)庫操作相關(guān);
  • 需要在子線程中更新UI的儿礼,如SurfaceView咖杂、TextureView,使用場景如地圖展示等蚊夫;
  • 3D相關(guān)诉字;
  • 訪問SD卡非本App對應(yīng)目錄;

????如果有非常成熟的插件,其實也算可以跨平臺壤圃。畢竟陵霉,不需要自己在各自平臺加以實現(xiàn),只需添加依賴項即可伍绳。這上面所列不能跨平臺的踊挠,嚴格來說并不準確。但受時間精力所限冲杀,對各種插件了解不多效床,姑且這么列出來吧。如果沒有插件可以使用漠趁,那么就需要自己編寫可通信的平臺代碼扁凛。

(5)Flutter遺憾

????要統(tǒng)一這么多的平臺,自然并非易事闯传。尤其是這些平臺已經(jīng)發(fā)展了很多年谨朝,相當?shù)某墒欤鞣矫嬖谀撤N程度上都達到了極致甥绿。所以不可避免地字币,F(xiàn)lutter有一些遺憾,如下:

  • 需要把Flutter各種庫共缕,如so庫洗出、插件庫、dart庫图谷,放入最終的包中翩活,使得App變得很大。一個僅僅展示HelloWorld的App便贵,安裝完后菠镇,要占據(jù)將近180M的空間;
  • 任何一個使用Flutter開發(fā)的App承璃,上面所列舉的庫利耍,都被包含其中。如果安裝20個盔粹,那么最少可能有180 * 20 M的空間被消耗隘梨,很多庫都是重復(fù)的,并且重復(fù)20次舷嗡。如果有更多App轴猎,占據(jù)的空間更大,重復(fù)次數(shù)更多进萄。
  • 性能問題捻脖。一個展示HelloWorld的App烦秩,冷啟動的時間,Android 真機大概7-8s(7年前的機器郎仆,android系統(tǒng)7.0),IOS真機(iphone Xs max兜蠕,最新系統(tǒng)16.0.2)大概5-6s扰肌。和原生App相比,差距實在太大了熊杨。這正是核心問題所在曙旭。而它又沒辦法避免,因為各種庫需要被加載晶府,尤其是flutter的so庫(30M+)桂躏。

????綜上,在一些性能要求不高的場景川陆,可以使用剂习;對于性能要求高的,目前沒法滿足较沪。
????Over 鳞绕!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者尸曼。
  • 序言:七十年代末们何,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子控轿,更是在濱河造成了極大的恐慌冤竹,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬射,死亡現(xiàn)場離奇詭異鹦蠕,居然都是意外死亡,警方通過查閱死者的電腦和手機躲株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門片部,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霜定,你說我怎么就攤上這事档悠。” “怎么了望浩?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵辖所,是天一觀的道長。 經(jīng)常有香客問我磨德,道長缘回,這世上最難降的妖魔是什么吆视? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮酥宴,結(jié)果婚禮上啦吧,老公的妹妹穿的比我還像新娘。我一直安慰自己拙寡,他們只是感情好授滓,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肆糕,像睡著了一般般堆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诚啃,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天淮摔,我揣著相機與錄音,去河邊找鬼始赎。 笑死和橙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的造垛。 我是一名探鬼主播胃碾,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼筋搏!你這毒婦竟也來了仆百?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奔脐,失蹤者是張志新(化名)和其女友劉穎俄周,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體髓迎,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡峦朗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了排龄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片波势。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖橄维,靈堂內(nèi)的尸體忽然破棺而出尺铣,到底是詐尸還是另有隱情,我是刑警寧澤争舞,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布凛忿,位于F島的核電站,受9級特大地震影響竞川,放射性物質(zhì)發(fā)生泄漏店溢。R本人自食惡果不足惜叁熔,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望床牧。 院中可真熱鬧荣回,春花似錦、人聲如沸戈咳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽除秀。三九已至,卻和暖如春算利,著一層夾襖步出監(jiān)牢的瞬間册踩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工效拭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留暂吉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓缎患,卻偏偏與公主長得像慕的,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挤渔,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容