Flutter技术解析与实战——闲鱼技术演进与创新-第1章(5)

简介: 本书将详细讲解闲鱼Flutter&FaaS云端一体化架构,以及闲鱼基于Flutter的架构演进与创新,学习一套全面的Flutter架构应用方案。本书介绍闲鱼技术团队利用Flutter技术改造和上线复杂业务的混合工程改造实践,抽取Flutter依赖到远程的实现细节,以及使用Plugin桥接获取设备信息、使用基础网络库等混合开发实践指南。这些实践遍布闲鱼各大业务线和应用场景,为读者使用Flutter打造自己的研发体系探索一条实践之路。除了介绍闲鱼Flutter应用框架Fish Redux、开发利器AspectD、FlutterBoost等一众开源工具与开发实践指南,你还将在......

1.2.3 方案的制定

1.两种模式

      首先将Native 工程处于独立目录环境下称为Standalone 模式,处于Flutter 目录下称为Flutter 模式。纯Native 开发或平台打包就处于Standalone模式,Flutter 对开发人员和打包平台来说是透明的,不会影响构建与调试。而Flutter 的代码则在Flutter 模式下进行开发,其相关库的生成、编译和调试都执行Flutter 定义的流程,如图1-13 所示。

10.jpg

图1-13 两种工程模式

2.厘清依赖

      从模式的定义来看,既然改造的核心就是把Standalone 模式提取出来,那么就要厘清Standalone 模式对Flutter 的依赖,并将其提取成第三方的库、资源或源码文件。以iOS 为例,通过阅读Flutter 构建的源码,可知Xcode工程对Flutter 有如下依赖:

      1)App.framework:Dart 业务源码相关文件。

      2)Flutter.framework:Flutter 引擎库文件。

      3)pubs 插件目录及用于索引的文件:Flutter 下的插件,包括各种系统的插件和自定义的channels(桥接通道)

      4)flutter_assets:Flutter 依赖的静态资源,如字体和图片等。

3.依赖引入的策略

      在改造过程中,闲鱼尝试过两种依赖引入策略,下面分别进行阐述。

(1)本地依赖。通过修改Flutter 构建流程,将其库文件、源码和资源直接放置到Native 工程的子目录中进行引用,以iOS 为例,就是将Flutter.framework 及相关插件等做成本地的Pod 依赖,也将资源复制到本地进行维护。由此,Standalone 模式便具备了独立构建和执行的能力,对于纯Native 开发人员来说,Flutter 只是一些二方库与资源的合集,无须关注。而在Flutter 模式下,Dart 源码的构建流程不变,不影响编译和调试。同时,由于是本地依赖,在Flutter 模式下的各种改动也可以实时地同步到Native 工程的子目录中。提交修改后,Standalone 模式也就拥有了最新的Flutter 相关功能。

      优点:将Flutter 相关内容的改动同步到Standalone 模式也比较方便;

      缺点:需要对Flutter 原有的构造流程进行稍复杂的改动,并且与后续的Flutter 代码合并会有冲突,且Native 工程与Flutter 的代码、库及资源等内容还是耦合在本地,不够独立。

      (2)远程依赖。远程依赖的想法是将Flutter 所有依赖内容都放在独立的远端仓库中,在Standalone 模式下引用远程仓库中的相关资源、源码和库文件,在Flutter 模式下的构建流程和引用方式不变,如图1-14 所示。

优点:对Flutter 自身的构建流程改动较少,较彻底地解决了本地耦合的问题。

 缺点:同步的流程变得更烦琐,Flutter 内容的变动需要先同步到远程仓库后再同步到Standalone 模式方能生效。

14.jpg

图1-14

1.2.4 改造的实现过程

1.目录的组织

      在Flutter 模式下,父工程目录下的iOS 和Android 的子目录分别包含对应的Native 工程。在代码管理上,子工程可以使用Git 的Submodule 形式,保证目录间的独立。

2.远程依赖的实现

      在Standalone 模式下,Flutter 的依赖内容都指向远程仓库中的对应文件,而在Flutter 模式下依赖的方式不变。

      (1)向Standalone 模式同步Flutter 的变更。由于远程依赖的问题是同步变动比较麻烦,为此闲鱼开发了一系列脚本工具,使该过程尽量自动完成。假设Flutter 的内容(可能是业务源码、引擎库或某些资源文件)发生变化,那么在Flutter 模式下构建结束后,脚本会提取生成好的所有依赖文件并将其复制到远程仓库,提交并打标签,然后依据打出的标签生成新的远程依赖说明(如iOS 下的podspec 文件),最后在Standalone 模式下将Flutter 的依赖修改至最新的版本,从而完成整个同步过程,如图1-15 所示。

15.jpg

图1-15

      (2)同步的时机

      建议在提测及灰度期间,每次Flutter 业务的提交都能够触发同步脚本的执行和App 打包;在开发期间,保持每日一次的同步即可。

      为解决引入Flutter 后的工程适配问题,闲鱼抽取了Flutter 的相关依赖放到远程供纯Native 工程进行引用,从而保证了Flutter 与纯Native 开发的相互独立与并行执行。

      该方案已在闲鱼施行了几个版本,并反向输出给了Flutter 团队,为其后续的hybrid 工程组织计划提供了方向和参考。同时,相信该方案也可以为转型Flutter 的团队提供帮助,虽然项目间的差异也会导致方案的不同,但是实施的思路依然有借鉴价值。

相关文章
|
Web App开发 数据采集 开发者
某查”平台请求头反爬技术解析与应对
某查”平台请求头反爬技术解析与应对
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
990 85
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
1563 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
679 5
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
698 4
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
810 6
|
编解码 人工智能 并行计算
基于 Megatron 的多模态大模型训练加速技术解析
Pai-Megatron-Patch 是一款由阿里云人工智能平台PAI 研发的围绕英伟达 Megatron 的大模型训练配套工具,旨在帮助开发者快速上手大模型,打通大模型相关的高效分布式训练、有监督指令微调、下游任务评估等大模型开发链路。本文以 Qwen2-VL 为例,从易用性和训练性能优化两个方面介绍基于 Megatron 构建的 Pai-Megatron-Patch 多模态大模型训练的关键技术
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
677 7
|
监控 负载均衡 安全
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
490 1

推荐镜像

更多
  • DNS