博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
29.Flutter与原生解耦式混合开发
阅读量:5940 次
发布时间:2019-06-19

本文共 2869 字,大约阅读时间需要 9 分钟。

还记得在 章节中,讲解了如何将一个 Flutter 工程引入现有原生工程的官方方案。

但这种方案需要修改原生工程配置,在大型合作开发的项目中使用起来不是很方便,大家都需要编译自己的工程和 Flutter 工程,虽然你可能并不需要负责 Flutter 的开发。

那能不能以依赖库的形式将 Flutter 项目与原生工程完全解耦呢?

要用的时候依赖上,需要下线的时候直接去掉依赖库就好。

当你看到这个章节的时候,答案很明显啊,就是可以啊 ?。

你可以把你的 Flutter 工程打包成一个 aar 包,然后让原生工程在需要的时候依赖这个 aar,不需要的时候去掉就好。

接下来看看如何实现吧。

1. 改造你的 Flutter 工程

?提示:把 Flutter 版本升级到最新版。本文使用的版本为 1.2.1 版本。

1.1 你需要一个 Flutter Application

如果你是从 0 开始,那么你要做的第一步就是创建一个 Flutter Application

这很简单,跟着提示一步步来,你也可以参考 。

如果你有一个 Flutter Module 工程,那么你需要在你的 Flutter Module 工程目录下的命令行中先输入:

flutter create temp复制代码

这会在你的 Flutter Module 工程下创建一个名为 tempFlutter Application 工程包。

你需要做的就是把 temp 中的 android 包移动到你的 Flutter Module 工程根目录,接着删除 temp 工程包。

然后把工程根目录下的 pubspec.yaml 进行小修改:

flutter:    ...    module:      androidPackage: com.coorchice.flutter_module      iosBundleIdentifier: com.coorchice.flutterModule*********修改后*************flutter:    ...复制代码

就是把 module: 部分的配置删除,然后点击 Packages get 刷新一下就好。

当完成这些操作只后,你应该会在 Flutter 项目目录中看到有一个 android 工程包:

之所以这样做,是因为 Flutter 自动生成的 android 工程会有一些专有的配置,自己重新创建一个的话会比较麻烦。

如果你本身就有一个 Flutter Application,就啥都不用干了。

1.2 改造 android 工程包

现在,我们需要对这个 android 工程包来点儿改造 ?。

1.2.1 修改 android 工程根目录下的 build.gradle

修改刚刚生成的 android 工程包的根目录下的 build.gradle

subprojects {    project.buildDir = "${rootProject.buildDir}/${project.name}"}*********修改后*************subprojects {    project.buildDir = "${rootProject.buildDir}/app"}复制代码

目的是为了让你在 Flutter 中引入的第三方插件能够被打包到最后生成的 aar 中。

否则后面运行的时候会出现找不到第三方插件类的 crash。

1.2.2 修改 app 目录下的 build.gradle

你需要在刚刚生成的 android 工程包中,找到 app 目录,然后修改该目录下的模块 build.gradle

1.修改 android 工程为 module 工程:

apply plugin: 'com.android.application'*********修改后*************apply plugin: 'com.android.library'复制代码

2.在 android{} 节点中增加:

compileOptions {   sourceCompatibility 1.8   targetCompatibility 1.8}复制代码

3.删除 android{ defaultConfig {} } 中的 applicationId

4.在 dependencies{} 节点增加:

implementation 'com.android.support:support-v13:27.1.1'implementation 'com.android.support:support-annotations:27.1.1'复制代码

因为 Flutter 的 sdk 中会用到这些库。

1.2.3 增加 facade 包

facade 包实际上在 Flutter Module 工程中的 .android 中会被生成。

它包含了两个封装好的 Java 代码文件,比如常用的:

FlutterView flutterView = Flutter.createView(   activity,   getLifecycle(),   "route0");复制代码

就是在这个包中。

你可下载 解压放到 android 工程包的 app/src/main/java/io/flutter/ 下:

1.2.4 修改 AndroidManifest.xml

为了避免后续 aar 包引入原生工程,导致打包时的冲突,需要把 android 工程包的 AndroidManifest.xml 进行修改。

把整个 <application> 节点删除就可以了 ?。

2.把 aar 引入原生工程

2.1 打包 aar

完成上面的步骤后,就可以开始打包 aar 了。

在你的 Flutter 项目根目录的命令行中输入:

flutter build apk复制代码

等待编译完成..

生成的 aar 包在 <你的Flutter项目目录>/build/app/outputs/aar/app-release.aar

2.2 在原生项目中添加 aar

你可以把生成的 aar 包放到远程仓库,通过 implementation 来依赖。

也可以把 aar 包复制到 app/libs 下,然后在 app 的 build.gradle 中加入:

implementation fileTree(include: ['*.aar'], dir: 'libs')复制代码

接着刷新一下工程就可以了。

? 看个运行起来的效果:

恭喜你!你现在已经把 Flutter 工程解耦成一个 aar 包了,你可以在你的原生项目中随时添加和移除了 ?。

如何找到我?

转载于:https://juejin.im/post/5c9b4cee5188253075032ace

你可能感兴趣的文章
SHELL获取计算机外网ip的几种写法
查看>>
博客正在搬迁中
查看>>
触发器与存储过程的区别
查看>>
我的友情链接
查看>>
centos搭建supervisor
查看>>
linux日志分割
查看>>
Samba再报安全漏洞
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Spring学习资料之 依赖注入(一)
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>
快递查询接口的调用与解析案例
查看>>
我的友情链接
查看>>
服务器性能优化配置建议
查看>>
oracle sql语句实现累加、累减、累乘、累除
查看>>
SCNetworkReachabilityRef监测网络状态
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>
接口由40秒到200ms优化记录
查看>>
java 视频播放 多人及时弹幕技术 代码生成器 websocket springmvc mybatis SSM
查看>>
Activiti6.0,spring5,SSM,工作流引擎,OA
查看>>