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

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

1.3.3 iOS 依赖的Flutter 库的抽取

1.iOS 中的Flutter 依赖文件是如何产生的

      执行编译命令“flutter build ios”,最终会执行Flutter 的编译脚本[xcode_backend.sh],而这个脚本主要做了下面几件事:

      获取各种参数,如project_path、target_path、build_mode 等,主要来自Generated.xcconfig 的各种定义。

      删除Flutter 目录下的App.framework 和app.flx。

      对比Flutter/Flutter.framework 与FLUTTER_ROOT/bin/cache/artifacts/engine {artifact_variant}目录下的Flutter.framework,若不相等,则用后者覆盖前者。

      获取生成App.framework 命令所需参数, 包括build_dir 、local_engine_flag、preview_dart_2_flag 和aot_flags。

      生成App.framework , 并将生成的App.framework 和AppFrameworkInfo.plist 拷贝到Xcode 工程的Flutter 目录下。

2.iOS 的Flutter 依赖抽取实现

      编译Flutter 工程,生成App.framework。

echo "===清理flutter 历史编译==="

./flutter/bin/flutter clean

echo "===重新生成plugin 索引==="

./flutter/bin/flutter packages get

echo "===生成App.framework 和flutter_assets==="

./flutter/bin/flutter build ios --release

      将各插件打包为静态库。这里主要有两步:一是将插件打包成二进制库文件,二是将插件的注册入口打包成二进制库文件。

echo "===生成各个插件的二进制库文件==="

cd ios/Pods

#/usr/bin/env xcrun xcodebuild clean

#/usr/bin/env xcrun xcodebuild build -configuration Release

ARCHS='arm64 armv7' BUILD_AOT_ONLY=YES VERBOSE_SCRIPT_LOGGING=YES

-workspace Runner.xcworkspace -scheme Runner BUILD_DIR=../build/ios

-sdk iphoneos

for plugin_name in ${plugin_arr}

do

    echo "生成lib${plugin_name}.a..."

    /usr/bin/env xcrun xcodebuild build -configuration Release

ARCHS='arm64 armv7' -target ${plugin_name}

BUILD_DIR=../../build/ios -sdk iphoneos -quiet

    /usr/bin/env xcrun xcodebuild build -configuration Debug

ARCHS='x86_64' -target ${plugin_name} BUILD_DIR=../../build/ios

-sdk iphonesimulator -quiet

    echo "合并lib${plugin_name}.a..."

    lipo -create

"../../build/ios/Debug-iphonesimulator/${plugin_name}/lib${plugin

_name}.a"

"../../build/ios/Release-iphoneos/${plugin_name}/lib${plugin_name

}.a" -o

"../../build/ios/Release-iphoneos/${plugin_name}/lib${plugin_name

}.a"

done

echo "===生成注册入口的二进制库文件==="

for reg_enter_name in "flutter_plugin_entrance"

"flutter_service_register"

do

    echo "生成lib${reg_enter_name}.a..."

    /usr/bin/env xcrun xcodebuild build -configuration Release

ARCHS='arm64 armv7' -target ${reg_enter_name}

BUILD_DIR=../../build/ios -sdk iphoneos

    /usr/bin/env xcrun xcodebuild build -configuration Debug

ARCHS='x86_64' -target ${reg_enter_name} BUILD_DIR=../../build/ios

-sdk iphonesimulator

    echo "合并lib${reg_enter_name}.a..."

    lipo -create

"../../build/ios/Debug-iphonesimulator/${reg_enter_name}/lib${reg_

enter_name}.a"

"../../build/ios/Release-iphoneos/${reg_enter_name}/lib${reg_enter

_name}.a" -o

"../../build/ios/Release-iphoneos/${reg_enter_name}/lib${reg_enter

_name}.a"

done

      将这些上传到远程仓库,并生成新的标签。对于纯Native 项目,只需要更新Pod 依赖即可。

1.3.4 Flutter 混合工程的持续集成流程

      按上述方式,就可以解除Native 工程对Flutter 工程的直接依赖了,但是在日常开发中还存在一些其他问题:

  • Flutter 工程更新,远程依赖库更新不及时。
  • 版本集成时,容易忘记更新远程依赖库,导致版本没有集成最新的Flutter 功能。
  • 多条线并行开发Flutter 时,版本管理混乱,容易出现远程库被覆盖的问题。
  • 需要最少一名开发人员持续跟进发布,人工成本较高。

      针对这些问题,闲鱼引入了CI 自动化框架,从两方面来解决:一方面是通过自动化降低人工成本,也减少人为失误;另一方面是用自动化的形式做好版本控制。

      首先,在每次需要构建纯Native 工程之前,自动完成Flutter 工程对应的远程库的编译发布工作,整个过程不需要人工干预。其次,在开发测试阶段,采用五段式的版本号,最后一位自动递增产生,这样就可以保证测试阶段所有并行开发的Flutter 库的版本号不会产生冲突。最后,在发布阶段,采用三段式或四段式的版本号,可以和App 版本号保持一致,便于后续问题追溯。

      整个流程如图1-18 所示。

10.jpg

图1-18


相关文章
|
12天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
51 13
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
80 10
|
8天前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
162 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
7天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
78 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
4天前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
56 4
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
3天前
|
安全 API 数据安全/隐私保护
速卖通AliExpress商品详情API接口深度解析与实战应用
速卖通(AliExpress)作为全球化电商的重要平台,提供了丰富的商品资源和便捷的购物体验。为了提升用户体验和优化商品管理,速卖通开放了API接口,其中商品详情API尤为关键。本文介绍如何获取API密钥、调用商品详情API接口,并处理API响应数据,帮助开发者和商家高效利用这些工具。通过合理规划API调用策略和确保合法合规使用,开发者可以更好地获取商品信息,优化管理和营销策略。
|
21天前
|
数据采集 DataWorks 搜索推荐
阿里云DataWorks深度评测:实战视角下的全方位解析
在数字化转型的大潮中,高效的数据处理与分析成为企业竞争的关键。本文深入评测阿里云DataWorks,从用户画像分析最佳实践、产品体验、与竞品对比及Data Studio公测体验等多角度,全面解析其功能优势与优化空间,为企业提供宝贵参考。
102 13
|
12天前
|
容器
Flutter Widget 解析
Flutter Widget 解析
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
17天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。

热门文章

最新文章

推荐镜像

更多