Android原生項(xiàng)目集成Flutter Module方案

Android原生項(xiàng)目集成Flutter Module方案

一.使用Android Studio創(chuàng)建Flutter module

1.打開Android Studio選擇“start a new Flutter project”
image.png
2.選擇Flutter Module點(diǎn)擊“Next”
image.png
3.點(diǎn)擊“Next”,點(diǎn)擊“finish”
image.png

二.打.aar文件

$cd .android
$./gradlew flutter:assembleDebug (Debug測(cè)試包)
$./gradlew flutter:assembleRelease (Release正式包)

成功執(zhí)行后,會(huì)在.android/Flutter/build/outputs/aar/目錄下,創(chuàng)建一個(gè)flutter-debug.aar的包文件

三.項(xiàng)目中引入Flutter Model

1. aar文件引入
implementation(name: 'flutter-debug', ext: 'aar')
image.png
2.直接引入Module

在項(xiàng)目的setting.gradle加上如下代碼:

setBinding(new Binding([gradle: this]))
evaluate(new File( settingsDir.parentFile, '<module_name>/.android/include_flutter.groovy' ))

然后需要在build.gradle(app)中加入如下依賴:

implementation project(':flutter')

四.項(xiàng)目中使用Flutter

Flutter中的widget等控件or布局,對(duì)于android或iOS來說是透明的,平臺(tái)只會(huì)認(rèn)為整個(gè)Flutter展示的內(nèi)容是一個(gè)view。
所以在android中的用Flutter,就是用一個(gè)view去承載Flutter項(xiàng)目。
其實(shí)可以理解為flutter就是一個(gè)提供了各種繪制方法的view,在Flutter里面的操作就是對(duì)view的onDraw方法的控制(還有touch事件)
所以直接當(dāng)做view去使用的話,就是這樣:

image.png

對(duì)應(yīng)的Flutter的lib中main.dart文件內(nèi)容是這樣:

image.png

window.defaultRouteName會(huì)接受到主項(xiàng)目中傳入的路由路徑,然后返回對(duì)應(yīng)的widget的,之后這個(gè)view就完全可以當(dāng)做一整個(gè)Flutter app去對(duì)待了。但它的生命周期是由Activity管理的,所以Flutter也可以用Fragment去承載:

FragmentTransaction tx = fragmentActivity.getSupportFragmentManager().beginTransaction();
tx.replace(R.id.someContainer, Flutter.createFragment("route1"));
tx.commit();

補(bǔ)充

集成到項(xiàng)目工程中時(shí)遇到兩個(gè)問題。

1.一個(gè)是Flutter不支持armeabi,而我們項(xiàng)目中庫都是armeabi的,只能通過將armeab-v7a強(qiáng)行打入armeabi來處理,這樣帶來的問題是某些不支持armeabi-v7a的cpu設(shè)備會(huì)無法運(yùn)行。(打包只配置armeab-v7a可以減少包的小大)
2.另一個(gè)就是編譯時(shí)出現(xiàn)錯(cuò)誤:沒有初始化虛擬機(jī),嘗試了各種方法,后來發(fā)現(xiàn)前面的編譯指令應(yīng)該去掉flutter:,否則不會(huì)打包flutter_assets,
$ ./gradlew assembleDebug

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容