Android 工程中整合 Flutter Module
為了將 Flutter 引入到 Android 工程中,官方提供了以 Module 形式載入。但是實踐一下,發現坑真的很多。首先如果 需要實現這個需求,可以參照ofollow,noindex" target="_blank">Add Flutter to Android 這篇官方wiki來實現。下面我講述一下遇到的坑吧,算是一個記錄。
Module 的位置
Android 開發者很容易誤以為整合 Flutter Module 就像以前 Android 工程整合 Module 一樣,所以按照這種思路,執行依賴 Sync 的時候就會出現include_flutter.groovy
相關檔案丟失問題。
要命的是這種問題是非常低階的,低階到別人都沒遇到過。解決這種問題兩種思路,第一種情況,本質就是你的配置錯了,官方 wiki 讓你將 flutter_module 放在 Android 工程的同級目錄
下,而不是 Android 工程目錄下。想一下這種問題為什麼會出現,主要就是一些不好的文章翻譯不正確導致的問題。
第二種就是嘗試一下在出錯的地方理解下原理,路徑配置的時候,加上 Android 工程的路徑,試驗下發現也是可以 Sync 過的。
setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, '/工程路徑/my_flutter/.android/include_flutter.groovy' ))
support 依賴包衝突
Flutter 中 Android 工程可能會與專案中的 support 之間存在衝突,加入如下程式碼即可:
dependencies { ... implementation(project(':flutter'),{ exclude group: 'com.android.support' }) ...
minSdkVersion
這個比較簡單,升級一下你的 minSdkVersion 的版本要是16
getLifeCycle 找不到
新增谷歌Maven倉庫,預設情況下,Android Studio 專案是不會配置的。如果要加入此倉庫,開啟專案的build.gradle
,將下面高亮的部分加入到配置檔案中。
allprojects { repositories { jcenter() maven { url 'https://maven.google.com' } } }
同時 Android 工程的 buildToolsVersion 太低,將25改成27。
驗證
最後,在 Android 宿主工程的 MainActivity 的 onCreate 方法中,加入以下程式碼,驗證是否能夠成功調起 Flutter 對應的頁面:
View flutterView = Flutter.createView( MainActivity.this, getLifecycle(), "route1" ); FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(600, 800); layout.leftMargin = 100; layout.topMargin = 200; addContentView(flutterView, layout);
以上就是按照官方 Wiki 配置會出現的一些問題以及最後驗證是否配置成功的程式碼。