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