基於原生項目開發把Flutter看成一個組件接入項目作到:ios
基於以上考慮設計探索出一套基於AAR依賴的Flutter混合組件化開發. Flutter源碼依賴: git
Flutter版本: v1.9.1+hotfix.6bash
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
這時我就面臨這樣一個問題: 能不能像使用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