flutter 與 android 混合開發


現有的混合開發方式,都是存flutter項目在android系統或者iOS上面跑。
但是,實際情況是,我們需要在一個成熟的native項目上面,跑幾個flutter頁面,逐步的進行flutter的融合,並且看情況來進行是否取代native的頁面。
以下都是基於flutter version:Flutter 1.12.13+hotfix.5 • channel unknown • unknown source
建議使用最新版本。

1.android項目上集成flutter頁面

之前很多都是手動的方式,由於flutter版本迭代迅速,很難一把就搞定。
現在官方出了自動的方案,一把到位。
參考google官方鏈接,通過androidstudio的方式,自動集成。
https://flutter.dev/docs/development/add-to-app/android/add-flutter-screen?tab=custom-activity-launch-kotlin-tab

2.實際踩得坑

2.1 FlutterActivity

這個頁面在那里,那里也找不到,在flutter的庫里面,還有2個???,這是什么case?

<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"
  />

先不要管那么多,按照文檔把這段code放在app的manifest里面,run,居然可以跑起來,這個頁面在那里,在flutter庫里面。
這個是新的版本的位置,以前也有一個 ,包名不一樣。

2.2 android和flutter的交互

這個時候,不需要打開2個studio的工程,android app可以跑起來,flutter項目支持熱加載,簡直爽爆了,but,我要交互怎么辦?MethodChannel 怎么定義,現在這個頁面,在庫里面,怎么改?
改不了,在庫里當然改不了。

class XXXActivity:FlutterActivity() {
 override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        //xxx
    }
}

如上,可以自己定義一個Activity繼承自FlutterActivity,這個時候,如上,就能拿到flutterengine,然后就可以開始進行交互了。
但是,這個時候,fluuter功能默認跑的還是FluterActivity,所以這個時候的修改,只能從新run整個android項目。當然純UI的修改,還是可以單獨運行flutter看到效果。

3.https://pub.dev/

這算是官方的三方庫大全
之前參考同事的flutter項目,發現不能編譯,but,這哥們前2天才剛剛編譯過,demo跑的飛起,什么情況?
后來發現,我的flutter版本升級了,也就是pub上面的庫,一定要看清楚兼容的flutter版本。flutter更新太快了,每個庫都要單獨支持。

這是我遇到的坑,后續還會推出其他flutter系列文章。

更多內容:demanmath
公共號:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM