在Android 項目集成flutter的時候遇到的一些坑墩剖,給大家分享一下。
首先在選擇集成flutter的方式郊霎,我本地安裝了flutter環(huán)境爷绘,所以采用源碼依賴的方式,編輯器是Android studio购对。
不知道是studio哪個版本之前陶因,可以直接在編輯器Filer ->new module 中 直接新建flutter module,但是我現(xiàn)在的Android studio 版本(2020 fox 版本)在file-> new module 中已經(jīng)沒有直接新建flutter module的選項了:
所以就按照flutter文檔上教程直接 手動創(chuàng)建flutter module:
打開終端解幽,你可以cd 到你項目的同級目錄創(chuàng)建,也可以在項目目錄內(nèi)向創(chuàng)建蝇刀,但是后面在settings.gradle 里路徑有所不同徘溢,后面會提到區(qū)別
flutter create -t module --org com.example my_flutter
"com.example" 是你flutter的包名,不能與主項目包名一樣捆探, “my_flutter”這個的名稱隨便取,但要和之后在settings.gradle里的路徑名一樣
執(zhí)行完上面的命令后黍图,你會在你項目的同級目錄或項目內(nèi)看到flutter module文件夾
將 Flutter 模塊作為子項目添加到宿主應(yīng)用的 settings.gradle 中:“ my_flutter” 名是剛才所創(chuàng)建的flutter module名稱:
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // 項目同級目錄的File路徑
'my_flutter/.android/include_flutter.groovy' // new
))
剖张!這里注意:如果你是在項目內(nèi)創(chuàng)建的flutter module揩环,那么Flie路徑要去掉‘.parentFile’,否則找不到module:
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir, // 項目內(nèi)的目錄的File路徑
'my_flutter/.android/include_flutter.groovy' // new
))
然后Sync 同步項目顾犹,然后在app的build.gradle里引入flutter module
dependencies {
implementation project(':flutter')
}
至此集成完畢褒墨。
2、接下來在運(yùn)行項目時的問題:
Could not resolve io.flutter:flutter_embedding_debug:1.0.0-57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab.
原因是我開著vpn梯子浑玛,關(guān)閉vpn后運(yùn)行正常噩咪!
3、辛苦完成集成并成功運(yùn)行項目后剧腻,接著在打開flutter Activity時又出現(xiàn)問題了:、
首先在AndroidManifest.xml 注冊flutter
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
確保使用如下的語句導(dǎo)入:
import io.flutter.embedding.android.FlutterActivity;
然后打開flutterActivity:
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute("/my_route") //沒有路由可以去掉這句
.build(currentActivity)
);
結(jié)果程序崩潰:
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/view/WindowInsetsControllerCompat;
谷歌查了查適配Androidx問題:
在這個地方的useVersion改成1.2.0以上,我目前使用的是1.7.0
if (details.requested.group == 'androidx.core') {
details.useVersion "1.7.0"
}
然后Sync 同步后栏账,再次打開flutterActivity,便不再崩潰竖般!