Flutter 混合开发中 aar 输出

很多时候,我们都是在已有的 Android 工程,引入 Flutter Module 工程,从而进行混合开发的。而引入 Flutter 的方式一般有2种:

1,源码依赖

优点:方便调试,可支持热重载;
缺点:所有开发人员,都需要安装 Flutter SDK;
接入方式:(这里不做详细介绍

  • 创建一个 Flutter Module 工程,
  • Android 主工程里面 setting.gradle 中添加:
setBinding(new Binding([gradle: this]))                                 
evaluate(new File(                                                      
        settingsDir.parentFile,                                               
        'your_flutter_module/.android/include_flutter.groovy'                          
))
  • Android 主工程 app/build.gradle 中添加依赖:
implementation project(':flutter')

2,aar 依赖

优点:方便内网打包,其他开发人员不需要关注 Flutter 层;
缺点:开发调试 Flutter 麻烦,特别是涉及到通信 Channel;
接入方式:正常 aar 的方式引入 Android 工程就行了;

详细介绍:

特别注意以下都是基于 Flutter SDK 1.12.13+hotfix.8 版本实现;
1,在 Flutter 工程目录下,输入命令:

flutter build aar --no-debug --no-profile

2,生成的 aar maven 都在 your_flutter_module/build/host/outputs/repo 目录下;
3,用脚本复制所有 aar 到一个 flutter_libs 目录;
以下是 Mac/Linux 命令(包括打包,复制等全部命令):

# 修改成你的 Android 主工程 app 目录
hostAppDir=$WORK_DIR/app
# 修改成你的 Flutter Module 工程目录
WORK_FLUTTER_MODULE_DIR=$WORK_DIR/your_flutter_module
cd $WORK_FLUTTER_MODULE_DIR
flutter clean
flutter pub get
flutter pub upgrade
# 打包生成 aar
flutter build aar --no-debug --no-profile
# 找到所有 aar 文件
apkapk=$(find $WORK_FLUTTER_MODULE_DIR/build/host/outputs/repo -name '*.aar')
for i in $apkapk
do
  echo $i
  # 复制 aar 到 flutter_libs 目录
  cp -f -v $i $hostAppDir/flutter_libs/${i##*/}
done

以上生成的 aar 是包括 Flutter 插件的 aar
但是不包括 flutter.jar 和 libflutter.so
4,复制 flutter.jar 和 libflutter.so
在目录 /用户/.gradle/caches/modules-2/files-2.1/io.flutter 下可以找到对应 jar 和 so,手动复制一份到 flutter_libs 目录里面就好了;
5,Android 主工程 app/build.gradle 添加依赖:

implementation fileTree(dir: 'flutter_libs', include: ['*.aar'])
implementation fileTree(dir: 'flutter_libs', include: ['*.jar'])

你可能感兴趣的:(Flutter)