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

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