Android开发经验谈

Flutter 混合开发初探

2020-05-11  本文已影响0人  e240c12aa0ad

前言

Flutter是个好东西。它可以在保证高性能的前提下,实现“跨平台”和“动态化”两大移动应用难题。但是同样也有两个非常严峻的问题摆在它面前:第一个就是从0到1的开发成本;第二个就是RN和Weex等动态化技术的捷足先登。基于这样一个现状,习惯了“灰度”思维的互联网人,通过混合开发的模式来尝鲜Flutter就显得合乎常理了。

从框架到代码-解读“跨平台”

image

所以从上面的分析可以看出,为了实现Flutter的平台无差异性,Google主要在 PlatForm Integration和Dart:UI部分做了适配工作。

从Apk的结构-解读“动态化”

我们通过解压一个release的混合开发APK包,来探索一下加入了Flutter之后的包到底发生了哪些变化以及这些变化对应的作用是什么。

image

从上图的标记中可以清楚的看出变化点

从Flutter现状-解读“混合开发”

闲鱼模式

双Branch共存(Flutter模式 && Standalone模式)

Standalone模式
纯Native开发或者是平台打包下的模式

Flutter模式
进行flutter相关功能的开发,库生成,编译和调试走的都是Flutter定义的流程。

  1. 在Flutter模式下进行flutter相关功能的开发。

  2. 将代码打包成一个aar库上传到repository中去进行版本控制。

  3. 切换分支到Standalone模式,修改相关依赖包的版本号。
    当然这种方法在实际的开发过程中还会遇到很多其他问题,比如复杂流程下生成aar库脚本的编写,比如两个模式下的代码同步等。

谷歌模式

对于方便的进行Flutter混合模式开发呼声是很高的,当然Google也看到了这一点,为此专门建立了wiki并且进行了持续4个月42个版本的更新。(https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps#preview-use-the-flutter-module-template

创建Flutter Module模式

1.1.1 切换flutter分支

假如直接使用

cd some/path/flutter create -t module my_flutter

会出现无法识别 command module的错误,查找其原因发现我们默认clone的分支是flutter的beta版本并不支持module命令所以首先需要

flutter channelflutter channel masterflutter upgrade

将分支切换到master并且进行upgrade操作。

1.1.2 创建Flutter module模版
flutter create -t module flutter_module

这个时候会看到project中新增加了一个flutter_module,其中包含了.android,.ios和关键的include_flutter.groovy文件

1.1.3 将Flutter添加到现有工程中

在android工程的根目录的settings.gradle中添加

include ':app' setBinding(new Binding([gradle: this])) evaluate(new File( settingsDir.parentFile, 'flutter_module/.android/include_flutter.groovy' )) 

在app的build.gradle中添加依赖

dependencies {implementation project(':flutter')
1.1.4 总而言之

简单的说,Google在兼顾维护成本和开发成本的前提下,为了Insert flutter module ,建立了一个逻辑依赖链

flutter_module/.android/include_flutter.groovy ->flutter_module/.android/Flutter/build.gradle ->flutterRootDir/packages/flutter_tools/gradle/flutter.gradle

最终利用
flutterRootDir/packages/flutter_tools/lib/中提供的flutter command

AndroidRootDir/build-tools/buildToolsVersion/中的提供的android command 完成混合开发模式下的打包操作。

上一篇 下一篇

猜你喜欢

热点阅读