Flutter組件化混合開發-Android

背景:

基於原生項目開發把Flutter看成一個組件接入項目作到:ios

  • 原生開發即便不配置Flutter環境依舊不影響原生業務開發
  • 不但願修改Flutter依賴的第三方插件,以及將這些插件上傳maven
  • 當使用源碼依賴的時候dart側能夠通flutter attach的方式debug調試,native側同時也支持斷點

基於以上考慮設計探索出一套基於AAR依賴的Flutter混合組件化開發. Flutter源碼依賴: git

源碼依賴
FlutterAAR依賴:
aar依賴

細節說明

Flutter版本: v1.9.1+hotfix.6bash

從dart側看flutter項目:

Flutter build commands.

Usage: flutter build <subcommand> [arguments]
-h, --help    Print this usage information.

Available subcommands:
  aar         Build a repository containing an AAR and a POM file.
  aot         Build an ahead-of-time compiled snapshot of your app's Dart code. apk Build an Android APK file from your app. appbundle Build an Android App Bundle file from your app. bundle Build the Flutter assets directory from your app. ios Build an iOS application bundle (Mac OS X host only). Run "flutter help" to see global options. 複製代碼

符合當前項目組件化思想的AAR方式無疑是個不錯的選擇 按照正常思路app

  • 把這些aar上傳到maven倉庫
  • 把項目的適配層flutterlib打成aar上傳至maven倉庫
  • 完成

這時我就面臨這樣一個問題: 能不能像使用maven的gradle插件來完成這個事情? 這就致使我須要在flutter 的插件的gradle文件中添加代碼本身開發也還好,可是若是是團隊開發,你對這個插件項目自己進行了修改若是別人沒有這個插件的源碼,就顯得不合理,因此就須要在git上再增長一個flutter插件的倉庫來管理,但是插件頗有可能會升級,這就致使你須要把以前的工做重複操做一遍.並且對一個原則上不修改的第三方庫進行這樣複雜的操做,顯然是資源上的浪費.maven

原則上不對第三方插件進行修改

個人思路是,將這些產物放在宿主項目的libs下 經過組件化

Implementation fileTree(dir: 'libs', include: ['*.aar'])
複製代碼

方式將flutter相關產物以aar的方式合併入安卓工程 然而使用當使用aar模式下flutterlib(native側支持flutter運行和爲flutter提供系統能力的適配層組件)時,flutterlib會默認從Maven倉庫獲取flutter產物和flutter插件產物 緣由在Flutter官方提供的源碼依賴方式:gradle

implementation project(':flutter')
 implementation project(':flutter_boost')
複製代碼

這就會致使最終flutterlib生成的aar多了:ui

<dependency>
      <groupId>com.idlefish.flutterboost</groupId>
      <artifactId>flutter_boost</artifactId>
      <version>1.0-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>

複製代碼

這樣的maven依賴 以前已經說了這些依賴已經放入了本地libs目錄下,怎麼讓項目不從Maven倉庫而是從libs獲取?this

//debug模式下源碼依賴
    debugImplementation project(':flutter')
    debugImplementation project(':flutter_boost')
//只在編譯時有效,不會參與打包
    compileOnly project(':flutter')
    compileOnly project(':flutter_boost')
複製代碼

再看pom.xml已經沒有這個依賴了spa

操做步驟

  • 使用Flutter命令 flutter build aar
  • 執行native工程的適配層組件flutterlib的gradle腳本 從FlutterHost中獲取aar
  • 經過gradle命令將適配層組件flutterlib上傳至用來放置組件的maven倉庫
  • 宿主項目使用aar方式依賴flutterlib -> 完成
相關文章
相關標籤/搜索