如何进行Flutter混合开发

栏目: IOS · Android · 发布时间: 6年前

内容简介:所以从上面的分析可以看出,为了实现Flutter的平台无差异性,Google主要在 PlatForm Integration和Dart:UI部分做了适配工作。我们通过解压一个release的混合开发APK包,来探索一下加入了Flutter之后的包到底发生了哪些变化以及这些变化对应的作用是什么。从上图的标记中可以清楚的看出变化点
如何进行Flutter混合开发

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

APK(Android应用)结构

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

如何进行Flutter混合开发

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

  • 变化1

    未在图中标出,但是我相信大部分的开发者应该可以猜的到,就是在dex中打入了 PlatForm Integration的代码(FutterActivity,FlutterApplication,FlutterView etc.)

  • 变化2

    assets下面的4个文件,内容均为arm指令

    • isolate_snapshot_data/isolate_snapshot_instr

      对应了我们的Flutter代码进行AOT编译,用于创建一个新isolate

    • vm_snapshot_data/vm_snapshot_instr

      用于初始化Dart VM,提供 runTime,gc等服务

    由于该部分内容通过gen_snapshot编译生成,且存放在App的data目录下面,所以

    为以后的动态更新提供了可能。

  • 变化3

    ICU Dart Language包,提供语言相关的数据信息。

  • 变化4

​ Flutter Engine层的代码

Flutter混合模式

相信对于绝大多数应用来说,从零开始重新做一个App的成本是相当高的,所以混合开发成了它们尝试Flutter的首选。

闲鱼模式

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

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

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

  • 优点

在Standalone模式下,纯Native开发者和打包平台,对Flutter是无感知的。在这种情况下,Flutter相关的代码可以认为是一个常规的第三方库文件。

  • 前期准备

    理清Standalone模式下对Flutter的依赖并将它们提取成一个aar库。

  • 开发步骤

    1. 在Flutter模式下进行flutter相关功能的开发。
    2. 将代码打包成一个aar库上传到repository中去进行版本控制。
    3. 切换分支到Standalone模式,修改相关依赖包的版本号。

    当然这种方法在实际的开发过程中还会遇到很多其他问题,比如复杂流程下生成aar库脚本的编写,比如两个模式下的代码同步等。

Google模式

对与方便的进行Flutter的混合模式开发呼声有多高,Google专门为了这个问题建立了Wiki并且进行了持续4个月42个版本的更新。

创建Flutter Module模式

1.1.1 切换flutter分支

假如直接使用

$ cd some/path/
$ flutter create -t module my_flutter
复制代码

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

flutter channel
flutter channel master
flutter 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'                                     // assumed existing content
    setBinding(new Binding([gradle: this]))                                 // new
    evaluate(new File(                                                      // new
      settingsDir.parentFile,                                               // new
      'flutter_module/.android/include_flutter.groovy'                      // new
    )) 
    复制代码
  • 在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 ->
$flutterRoot/packages/flutter_tools/gradle/flutter.gradle 
复制代码

利用 $flutterRoot/packages/flutter_tools/lib/中的flutter command &&

$AndroidRoot/build-tools/buildToolsVersion/中的android command

完成混合开发模式下的打包操作。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)

八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)

孙丽敏等编 / 吉林教育出版社 / 2004-6 / 10.0

本书将与知识点、重点、难点和考点有关的典型题做全析全解,是具有解题题典性质的助学读物。但本书又优于解题题典,不仅展示解题过程,更详细地提供了解题思考过程和切入点的选择方法,教方法导引思路的功能更强。 学生要提高解题能力,必须具备两个条件:一是打好基础,二是能够运动所学知识分析问题和解决问题。本书用例题解析解说知识点、重点、难点和考点,同时提供解题思考过程,在打基础中激活能力,在解题实......一起来看看 《八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具