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'])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章