入门

作者: 缪呜 | 来源:发表于2021-04-16 16:25 被阅读0次

    工程结构

    • 核心逻辑:如何在最小改动已有IOS或Android工程的前提下运行Flutter。
          Flutter理解为一个单独的模块,通过Pod库 [IOS] 或者AAR库 [Android] 的方式,由CocoaPods和Gradle引入主工程。


      图1-1

    Flutter启动下的Flutter调式与热重载

    主要工作:

    1. 检查是否需要重新生成flutter_tools.snapshot。
    2. 基于pubspec.yaml依赖 [pub packages get] ,并生成插件描述文件.flutter-plugins和pubspec.lock。
    3. 基于Flutter配置,生成Generated.xcconfig [IOS] 和local.properties [Android] 。
    4. 基于Gradle和Xcodebuild构建应用。
    5. 基于ADB和LLDB启动应用。
    6. 等待应用中的Flutter启动,寻找Observatory端口,通过Dart Debugger连接以便调试。
    7. 寻找到端口后同步Hot Reload依赖的文件,同时透过Daemon监听命令 [用户点击插件按钮] 实现Full Restart或Hot Reload。
          解决Navtive启动下的Dart调试和Hot Reload,就可以解决fluttertools造成的编译慢、以及调试环境不稳定的问题。

    Native启动下的Flutter调式与热重载逻辑

    Native与Flutter联合调试

    结合Xcode的Attach to Process可以实现IOS与Flutter联调。

    混合工程改造实践

    1. 项目背景及问题

    在默认情况下,引入Flutter的Native工程无法脱离父目录进行独立构建和运行,因为它会反向依赖于Flutter相关的库和资源。
    在拥有了Native工程的情况下,开发者不太可能去创建一个全新的Flutter工程并重写整个项目,因此Flutter工程将包含整个Native工程,产生了一系列问题:

    • 构建打包问题-----引入Flutter后,Native工程因此对其产生了依赖和耦合,从而无法独立构建。
    • 混合编译导致开发效率降低-----向Flutter转型的过程中必然有很多项目使用Native开发,工程结构的改动会使开发过程无法在纯Native环境下进行,适配到Flutter工程结构对纯Native开发来说会降低开发的效率。
    2. 制定解决方案

    (1).两种模式

    模式 理解 内容
    Standalone模式 Native工程处于独立目录环境 纯Native开发或平台打包
    Flutter模式 Flutter代码在该模式下进行开发,对开发人员和打包平台来说是透明的 Flutter代码相关库的生成、编译和调试都执行Flutter定义的流程
    图1-2 两种工程模式

    (2).厘清依赖
    厘清Standalone模式对Flutter的依赖,并将其提取成第三方库、资源或源码文件。
        1. App.framework: Dart业务源码相关文件
        2. Flutter.framework: Flutter引擎库文件
        3. pubs插件目录及用于索引的文件: Flutter下的插件,包括各种系统的插件和自定义的channels [桥接通道]
        4. flutter_assets: Flutter依赖的静态资源,如字体和图片等
    (3).依赖引入的策略

    依赖 优点 缺点
    本地依赖 将Flutter相关内容的改动同步到Standalone模式也比较方便 需要对Flutter原有的构造流程进行稍复杂的改动,并且与后续的Flutter代码合并会有冲突,且Native工程与Flutter的代码、库以及资源等内容还是耦合在本地,不够独立
    远程依赖 对Flutter自身的构建流程改动较少,较为彻底的解决了本地耦合的问题 同步的流程变的更加繁琐,Flutter内容的变动需要先同步到远程仓库后再回步到Standalone模式才能生效
    图1-3 远程依赖
    3. 改造的实现过程

    (1).目录的组织
    在Flutter目录下,父工程目录下的IOS和Android的子目录分别包含对应的Native工程。
    在代码管理上,子工程可以使用Git的Submodule形式,保证目录间的独立。
    (2).远程依赖的实现
    在Standaloene模式下,Flutter的依赖内容都指向远程仓库中的对应文件
    在Flutter模式下依赖的方式不变
        1. 向Standalone模式同步Flutter的变更
        2. 同步的时机:
            建议在提测和灰度期间,每次Flutter业务的提交都能够触发同步脚本的执行和App打包
            在开发期间,保证每日一次的同步即可

    相关文章

      网友评论

          本文标题:入门

          本文链接:https://www.haomeiwen.com/subject/npdelltx.html