《閑魚應用基于 Kun Flutter 在鴻蒙 OS 上的移植實踐-鄔吉風.pdf》由會員分享,可在線閱讀,更多相關《閑魚應用基于 Kun Flutter 在鴻蒙 OS 上的移植實踐-鄔吉風.pdf(33頁珍藏版)》請在三個皮匠報告上搜索。
1、閑魚鴻蒙原生應用移植實踐阿里巴巴高級無線開發專家/鄔吉風個人介紹 鄔吉風,阿里巴巴高級無線開發專家,畢業于浙江大學。開源項目fish-redux,flutter_boost作者,閑魚終端基礎架構負責人。分享綱要鴻蒙原生開發的必要性如何有效評估復雜度閑魚的移植方案實操的技術方案詳解目前的進展和問題小結和展望為什么要鴻蒙原生開發可以預見,當HarmonyOS Next開始發布/升級,將對業務產生巨大影響。華為現網手機設備總量月5.2億,如果2024年底(新發+升級)HarmonyOS Next設備達到1億,大約影響華為渠道19%的用戶。還在猶豫要不要干的時候?如何有效評估復雜度工作主要包括六大部分
2、工作主要包括六大部分1.原生業務-Java/OC代碼用ArkTS完成重寫。2.原生框架-Java/OC代碼用ArkTS/C+完成重寫。3.跨端業務不用改,平移后,回歸驗證或簡單適配性修改。4.跨端容器(Kun/Flutter/Web)Java/OC代碼用ArkTS完成重寫,C+庫重編譯。5.二三方SDK接入,部分涉及Java/OC代碼用ArkTS重寫。6.鴻蒙環境/編譯/構建/灰度等工作流的支持改造。核心圍繞語言差異,選擇以重寫為主,還是移植為主,會極大影響項目復雜度核心圍繞語言差異,選擇以重寫為主,還是移植為主,會極大影響項目復雜度閑魚選擇以移植為主的方案40%40%10%10%KunFlu
3、tterWebNative閑魚重度使用跨端UI框架90%90%的業務以跨端的業務以跨端UIUI框架來承接框架來承接先從 Web For OHOS 移植說起API API 擴展擴展同層渲染同層渲染23UA UA 兼容兼容1整體原則:盡可能的減少對業務層的適配成本Chromium99容器定制容器定制4基礎可用Flutter For OHOSFlutter是什么?為什么要單獨做鴻蒙上的適配?Flutter不是天然跨平臺的么?12官方支持六個平臺:iOS、Android、Web、Windows、macOS、Linux。其他系統,如HarmonyOS,需自定義將Flutter嵌入為使之成為平臺的UI工具
4、包選擇。Flutter是Google推出的開源UI工具包。它具有高性能、跨平臺、良好的開發者體驗、和完善的社區生態等特點移植Flutter能否像移植網頁一樣簡單?結論:像Web一樣移植Flutter代碼,但不簡單ReactNativeReactNativeFlutterFlutterNativeNativeWeb Web 0%100%接近100%在鴻蒙系統上,我們能幾乎復用100%的Flutter(Dart)代碼,可以類比是一次對不同瀏覽器版本的兼容代碼復用率對比代碼復用率對比如何移植Flutter代碼到OHOS幾大關鍵問題亟待解決如何在鴻蒙系統上運行Flutter(Dart)代碼,比如一個“
5、Hello World?”如何以混合的方式運行Flutter、原生鴻蒙、Web頁面?12如何解決自身和三方的Flutter Plugins代碼的移植?3音視頻場景能力-外接紋理方案4如何構建獨立的編譯流水線?5工具鏈工具鏈3.2運行時運行時3.1Android,iOSOHOSOHOSFlutter For OHOS由華為官方,閑魚提交了30多個PR-gn 編譯腳本、交叉編譯工具鏈-命令行,flutter devices&flutter precache等涉及shell目錄下代碼涉及attachment/tools目錄下代碼diffdiff 20230907/ dev :openharmony-
6、sig/flutter_flutter.git-渲染和Surface-事件-線程-插件機制Flutter架構圖核心適配代碼接近100%跨端復用123如何在鴻蒙系統上運行Flutter(Dart)代碼,比如一個“Hello World?”FlutterBoost For OHOS 目前在 Flutter For OHOS的基礎上,混合棧 FlutterBoost的鴻蒙版適配工作已經初步完。如果有依賴FlutterBoost的團隊可以使用,https:/ FlutterBoost是一種非常特殊的Flutter Plugin,它和Embedder有很高的耦合關系。很長一段時間,Embedder層的A
7、PI概念盡可能的去對齊Android。從最初的FlutterAbility粒度,到對齊到FlutterView粒度。如何以混合的方式運行Flutter、鴻蒙原生、Web頁面?1能力上支持了ArkUI、Flutter、Web等多混合技術棧支持多FlutterView單FlutterEngine(單引擎的混合架構)23對齊鴻蒙OS的Componet級別生命周期支持4對齊鴻蒙OS的UIAbility級別生命周期支持Plugins For OHOS如何最快的將完整的閑魚復刻到鴻蒙系統?發現和驗證更多問題階段二:線性接入重要SDK,取代代理層34階段一:1SDK 移植的兩個階段如何讓各個模塊的工作完全獨
8、立解耦,并行開發Plugins遠程調用通過自定義FlutterBinaryMessenger替換系統默認實現,起到了插件遠程調用的能力ClientServer外接紋理 For OHOS基礎場景-API平移概念和接口設計上基本對齊Android1復雜場景-重構代碼ETS語言受限2ETS無法直接使用OpenGL ESETS多線程能力受限制需要引入C+重構拍攝、相冊、視頻等場景播放器示例代碼工程化 For OHOSFlutter產物構建和發布鴻蒙應用HAP整包構建和發布多Flutter SDK無感切換 234Flutter引擎構建和發布1Flutter主工程在Android/iOS/OHOS同等開發
9、調試5會遇到哪些典型問題Embedder部分能力未對齊系統API能力部分待完善三方Package部分需要適配業務層是否要感知到?抹平差異抹平差異差異處理Platform.isOHOS Flutter 業務層3.73.7Flutter FrameworkFlutter EngineOHOSPolyfill3.33.3Flutter FrameworkFlutter EngineAndroid/iOS類似于為了抹平不同瀏覽器版本差異而引入的PolyfillKun For OHOSKun是什么?Kun的特點12Kun是一個閑魚自研的,使用 Javascript/HTML/CSS 進行開發,使用Flu
10、tter進行增強的跨端開發框架。目前Kun支持了閑魚約40%的重點產品鏈路。3使用范圍高性能高一致性 Web API和W3C子集開放性兼具Web、Flutter生態Kun For OHOS架構圖Kun 100%位于 Flutter 之上,所以在 Flutter For OHOS 的基礎上,只需要極小的適配成本。Kun 如何移植SO動態庫編譯(Kun/yoga/quickjs)POSIX接口或系統特有的接口切成鴻蒙的SDK CAPI工具鏈重新編譯同時支持多Flutter版本到這一階段,我們基本完成了跨端UI框架的移植技術小結Web For OHOSFlutter For OHOSKun For
11、OHOS 通過基于Kun/Flutter/Web移植,項目的復雜度得到了量級的降低目前的進展經過幾個月的相關工作,可以不修改業務代碼情況下,在HarmonyNext上運行閑魚的大部分基礎產品鏈路。盡管看上去順利極了,但其實是踩過了無數的坑。話題一:性能 PK目前由于一些基礎中間件的不完善,現階段還有一些卡頓。目前由于一些基礎中間件的不完善,現階段還有一些卡頓。通過在通過在EmbedderEmbedder層、系統層、組件層進行優化,層、系統層、組件層進行優化,鴻蒙上表現更好。鴻蒙上表現更好。話題二:Flutter 鴻蒙生態三方Packages的常態化支持2Flutter For OHOS的長期維護機制1小結和展望鴻蒙原生開發的必要性如何有效評估復雜度閑魚的移植方案實操的技術方案詳解目前的進展和問題終端技術和組織的新變化需求1需求2需求3Android團隊iOS團隊Harmony團隊Web團隊客戶端架構團隊客戶端工程團隊Web架構團隊Web工程團隊需求1需求2需求3終端團隊A終端團隊B終端基礎設施團隊