谷歌開發者大會2018實錄——Flutter篇

閒魚技術發表於2019-03-04

作者:閒魚技術——宗心

摘要

一年一度的google開發者大會2018上,

flutter以什麼樣的形態展現在大家面前,1.0版本何時釋出?

有哪些應用場景?效能的表現如何?

國內的flutter開發者生態又是怎樣的?

作為google合作伙伴的閒魚展臺有哪些趣事?大家問了哪些問題?

我們正在在大會結束後5個小時內的返杭路上敲下這段文字,真誠為您分享。

google開發者大會於今年9月20日在上海舉辦,閒魚團隊作為google的合作伙伴參加這次會議。我參會前就收到邀約要寫一下這次GDD的一些見聞和看法,因此有了這篇文章,一些個人看法和感受,供大家參考。希望或多或少能幫到大家。由於我在團隊負責flutter的整體落地,因此主要關注了flutter相關的議題。

image.png
flutter今年在開發者大會上有四個議題,前兩個議題著重在介紹flutter的優勢,以及在國內外的應用場景,以介紹類偏多。後兩個議題主要講解了flutter的上層效能優化實踐,以及Skia場景下的效能優化策略。說一下這次參會的一些收穫和自己看到的一些趨勢吧。

收穫

  • 工程側比較關心的幾個問題得到了一定的解答

一個是工程側我們關注的在hybrid場景下更方便的hot reload方案,目前在純flutter工程的場景下,hot reload的支援相對完備。但在hybrid場景下hot reload一直不太方便,雖然閒魚團隊整理了一些在這個場景下的需要使用的命令列工具,但業內暫時沒有什麼通用的方案,flutter團隊也意識到了這一點,因此他們這次的showcase中展示了android studio上的attach功能,當hybrid工程使用android studio啟動native程式碼後,就可以自動被attach上,從而可以進行後續的debug和hot reload能力,這部分功能在下圖上可以看到一些端倪,感興趣的同學可以自己編一個studio plugin用一下。

image.png

另一個是flutter內嵌native的一些可能的方案。目前在flutter的master分支上,大家可以關注下platform_views.dart中的RenderAndroidView這個類,基本原理是渲染部分仍然使用texture的機制進行UI部分的繪製,事件的部分的實現是將Dart側的事件組裝成AndroidMotionEvent通過systemchannel再回傳給Android的nativeView,這部分iOS在github上暫時還沒有實現,但理論上應該是一致的,目前程式碼側也找到了一些猜測的依據。

image.png
可以按照下圖的位置找到這個case的example,自己註冊platformview
image.png
這部分說一下自己的看法,這個解決方案的完成意味著後續不管是webview在flutter側的內嵌還是高德地圖的內嵌都會迎刃而解,這就使得在native側已有的ui程式碼得到了比較好的複用,有利於在已有app上做flutter的程式碼遷移,不過目前看起來,程式碼只有單端的實現,還需要繼續期待。

  • 瞭解到較多基於flutter側的UI渲染的效能優化的手段。

我們之前有嘗試在低端機上進行flutter和native的效能測試,並沒有系統的理解為什麼flutter的效能會更好,經過第一天的最後兩個topic,有了一些啟發。從佈局的角度出發,flutter整個的佈局體系相較於iOS和android的佈局體系有更少的計算,另外skia底層相較於android自帶的skia也有較大的優化,針對於跟渲染相關的底層api的呼叫次數也有明顯的下降。兩個topic在程式碼的編寫上也給出了一些建議,針對widget的setState重新整理的範圍越少,效能越好,另外應該較少呼叫save Layer相關的Api,以提升底層渲染的效率。由於兩個topic都只有30分鐘,很多細節沒有細講,後續期待他們的ppt放出來。

image.png
最後在整個演講的過程中看到了於瀟和李宇騫兩位老師針對flutter以及skia在每一幀渲染上的一些函式呼叫的分析和解決,對很多細節的部分錙銖必較,這個就是匠人精神,也希望他們的這種專業精神,能感染更多的人。

趨勢

  • flutter整體趨於完善,hybrid場景的支援加速部署。

flutter釋出pre release 2,並有可能年底釋出1.0的版本,就我自己在官網github的瞭解來看,最近幾個版本主要都是在補齊iOS design風格的一些控制元件,engine側改的並不多。另一方面,flutter團隊意識到,如果flutter需要後續在眾多app內落地,hybrid場景(flutter+Native)不可避免。在這幾個議題的showcase中,國內的幾家大公司使用的全都是hybrid的場景。因此我們才會看到,Matt Sullivan在第一個議題花了大量篇幅教大家如何以module的形式在已有app內引入flutter的程式碼,後續通過新的flutterplugin提供hybrid場景下更加方便的hot reload能力。這個過程中我眼尖又發現了裡面存在flutter嵌webview的showcase,一切都證明,後續flutter會更加完善hybrid場景的能力,讓更多希望接入的app可以用更低的成本接入已有app進行開發和嘗試,相信這對社群的繁榮會有較大的推動作用。

  • 國內開發者蠢蠢欲動,有星星之火,燎原之勢。

在flutter官方的渠道中能看到除了閒魚團隊,還有一些其他的大廠也在使用flutter進行應用。線上下交流過程中,發現了非常多的團隊或多或少在嘗試應用flutter。這次跟滴滴,拼多多,百度,以及阿里系的很多同學都有交流,當然也有很多創業團隊在觀望。這個過程中有希望嘗試直接構建新app的,也有在老app中增加功能的,總之,這次發現了很多之前沒有發現的團隊在跟進,做有針對性的研究和改造。

在這個趨勢下,我更多的思考的是閒魚作為flutter社群的領頭羊,能給社群帶來什麼。一直一來我們長期穩定的對flutter社群輸出一些文章,講解我們的解決方案和flutter相關的底層原理。後續我的希望是,能抽象化我們的解決方案貢獻給社群,讓更多的同學可以受益。相信這部分在後續的幾個月應該會有一些產出給到大家,大家敬請期待。

閒聊兩句

由於今年我們是google的合作伙伴,因此給了團隊一個專門的展位,非常感謝google的顧仁民同學幫忙,展位安排的非常棒。

image.png
我原來以為在展位很輕鬆,後來才發現,由於黑科技UI2Code讓我們的展位異常火爆,大家問了非常多關於flutter和tensorflow-lite的問題,人滿為患。
image.png
另外我們的展位也吸引了google的tensorflow-lite和flutter的負責人前來圍觀,我們團隊現場生成程式碼童叟無欺。
image.png
今年的會議也讓我跟很多網友線下面基,大家一起分享交流技術,非常開心。
image.png

文章的最後

中秋到來之際,先祝大家中秋節快樂,然而GDD的最後一天,人在囧途,由於中秋節在即,買不到高鐵票,只能綠皮火車站回杭州,你們現在看到的內容是我坐在綠皮火車過道寫下的,看到這裡的老鐵,閒魚團隊長期招募flutter的研發同學,一起用技術改變世界,此時此刻非你莫屬,

詳詢guicai.gxy@alibaba-inc.com

獲取更多 Google 開發者大會 2018 技術乾貨

相關文章