基于原生项目开发把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