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 -> 完成
相关文章
相关标签/搜索