Flutter和原生App混合開發

可以查看官方文檔

https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps

混合開發有兩種集成方式

  • Flutter源碼集成,谷歌官方提供的方案,
    優點:方便調試,交互性強。
    缺點:所有開發人都需要flutter環境
  • aar包或fragmwork集成,Flutter項目單獨開發,開發完成後發佈成aar包或者ios的framework形式,原生項目依賴flutter輸出的產物即可。
    優點:原生和flutter互不影響,不知道是否有Flutter模塊
    缺點:需要對構建依賴有一定了解

鄙人現在使用的源碼集成。

原生Android與Flutter混合開發

給原生android添加Flutter

1. 首先創建好Android項目

2. 再這個Android項目的裏面創建一個flutter模塊

3. 在Android項目中新建一個模塊,選擇導入flutter模塊(就是上一步創建好的)。點擊確定。馬上就會給android項目添加如下東西setting.gradle和app的build.gradle文件中。

  • 在build.gradle文件中會自動添加
implementation project(':flutter')
  • 在setting.gradle文件中自動添加
setBinding(new Binding([gradle: this]))
evaluate(new File(
  settingsDir.parentFile,
  'flutter_module\\.android\\include_flutter.groovy'
))

//註釋:上面File就是Flutter模塊的地址,不管Flutter模塊在哪裏,只要路徑正確就可以引用到。我放在Android項目下面,這樣方面管理。於是我把“settingsDir.parentFile” 改成“rootDir”,其他不變。即可。

4. 在Android項目中調用Flutter的view層。同時在最好在application中初始化flutter(),否則會崩潰。

5.運行即可成功顯示。

需要注意下面的編譯出錯信息

  1. Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in library
    解決辦法:修改Android項目或者flutter中的Android項目其中一個minSdkVersion爲同一的版本就行,一般改成16就行。

  2. Default interface methods are only supported starting with Android N (–min-api 24)
    解決辦法:必須添加,在app模塊下的build.gradle中的Android節點下面添加:

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
}
  1. java.lang.IllegalStateException: ensureInitializationComplete must be called after startInitialization
    解決辦法:必須在初始化

  2. Error: Invoke-customs are only supported starting with Android O (–min-api 26)
    解決辦法:

  3. 需要修改下Flutter模塊下Android項目中的Flutter和FlutterFragment中兩個文件中的引用包路徑。涉及到AndroidApi28以前兼容包和AndroidX的衝突,
    解決辦法:選擇其中一種形式,一般都會使用androidX。

  4. 出現如下代碼錯誤,不能直接運行Flutter模塊,
    在這裏插入圖片描述

AndroidManifest.xml could not be found.
Please check F:\android_flutter_space\shell_master\flutter_module\android\AndroidManifest.xml for errors.
No application found for TargetPlatform.android_arm64.
Is your project missing an android\AndroidManifest.xml?
Consider running "flutter create ." to create one.

解決辦法:請查看你的Flutter項目中的pubspec.yaml文件中是否有一下代碼。然後執行Packages get。最後運行,有可能其他問題,比如multidex問題,或者androidX問題。自行百度解決就行。
```
  module:
    androidX: false
    androidPackage: com.zsj.flutter_module
    iosBundleIdentifier: com.zsj.flutterModule
```
這段代碼的大概意思是:這是flutter模塊,是否支持androidX,在Android端的包名爲自定義包名,在ios端的包名爲自定義包名,

##參考網站
https://mp.weixin.qq.com/s/QoevlX6pUecbX56nCDEgCA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章