Flutter build aar 簡易教學和心得

首先,只有Flutter Module Project可以產生aar,Flutter App Project不行


網路上有一些說法是可以在pubspec.yaml最後面新增module程式碼區塊,但目前沒有專案有成功過。

Flutter Module Project 比Flutter App Project 少了個別平台的程式碼
你在Flutter Module Project裡面不會看到android的區塊,只會有.android,這是自動產生,就算更改之後也會被重新產生的覆蓋。
所以需要把在之前寫的.java或.kt和一堆可能也有CMake之類的直接寫在aar要放的Android專案內(MethodChannel可以很正常的溝通)這部分就考驗你對本來專案或Android專案的了解程度了。
也因為是直接寫在父專案內,所以如果有的話也記得也要implementation套件和聲明需要的權限。

Flutter build aar的限制:
  • 在筆者撰文的當下(希望這篇不要躺在我的草稿欄太久...),一個專案只能有一個Flutter aar(補充:Flutter 1.26以後開始有測試版可以支援多個)
  • 需要匯入 Java 8
  • 僅支援AndroidX
  • 僅支援x86_64,armeabi-v7a 和 arm64-v8a的Ahead-of-Time (AOT)函式庫
  • Flutter專案和Android專案不可以用同個package名稱

遷移到AndroidX

gradle.properties(Project)
suppport_library_version=28.0.0
android.useDeprecatedNdk=true
android.useAndroidX=true
android.enableJetifier=true
記得點選 Sync Now

匯入 Java 8
build.gradle(Module)
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

開始產生aar和匯入

一開始步驟很簡單,可以查看官方說明文件
產生aar
flutter build aar
會產生如下說明:
只要依照上面寫的在build.gradle(Module)裡新增程式碼
然後在AndroidManifest.xml宣告要新增的頁面
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize" />

跳轉頁面的程式碼:
java
startActivity(FlutterActivity.createDefaultIntent(this));
kotlin:
startActivity(FlutterActivity.createDefaultIntent(this))
如果你是因為原本Flutter有寫Android平台程式碼所以不能直接呼叫,只要類別繼承FlutterActivity
假設類別名稱為:RuyutFlutterActivity.class

跳轉頁面就這樣寫:
startActivity(new FlutterActivity.NewEngineIntentBuilder(RuyutFlutterActivity.class).build(this));

如果你成功執行,那就太棒了
如果出現依賴錯誤,可以參考這篇:[Android Studio] Gradle 排除子依賴的三種方式
記得先查看依賴樹,檢查套件子依賴是否衝突
如果真的排除不了,可以考慮替換Flutter的依賴或是重寫,可能遠比排除還快上許多

有任何需要注意的都歡迎補充

留言