很多时候,我们都是在已有的 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'])