当前位置: 首页 > article >正文

鸿蒙系统起飞!Flutter 完全适配指南CSDN2021-01-23 02:47

鸿蒙系统与Flutter的适配探索

鸿蒙系统(HarmonyOS)是华为推出的一款面向未来、面向全场景的分布式操作系统。自2020年9月HarmonyOS 2.0发布以来,华为加快了鸿蒙系统大规模落地的步伐,预计2021年底,鸿蒙系统会覆盖包括手机、平板、智能穿戴、智慧屏、车机在内的数亿台终端设备。对移动应用而言,新的系统理念、新的交互形式,也意味着新的机遇。如果能够利用好鸿蒙的开发生态及其特性能力,可以让应用覆盖更多的交互场景和设备类型,从而带来新的增长点。

挑战与机遇

与面临的机遇相比,适配鸿蒙系统带来的挑战同样巨大。当前手机端,尽管鸿蒙系统仍然支持安卓APK安装及运行,但长期来看,华为势必会抛弃AOSP,逐步发展出自己的生态,这意味着现有安卓应用在鸿蒙设备上将会逐渐变成“二等公民”。然而,如果在iOS及Android之外再重新开发和维护一套鸿蒙应用,在如今业界越来越注重开发迭代效率的环境下,所带来的开发成本也是难以估量的。因此,通过打造一套合适的跨端框架,以相对低的成本移植应用到鸿蒙平台,并利用好该系统的特性能力,就成为了一个非常重要的选项。

在现有的众多跨端框架当中,Flutter以其自渲染能力带来的多端高度一致性,在新系统的适配上有着突出的优势。虽然Flutter官方并没有适配鸿蒙的计划,但经过一段时间的探索和实践,美团外卖MTFlutter团队成功实现了Flutter对于鸿蒙系统的原生支持。

技术探索

在适配开始之前,我们要明确好先做哪些事情。先来回顾一下Flutter的三层结构:

  1. 框架层:使用Dart语言开发,面向Flutter业务的开发者;
  2. 引擎层:使用C/C++开发,实现了Flutter的渲染管线和Dart运行时等基础能力;
  3. 嵌入层:负责与平台相关的能力实现。

显然我们要做的是将嵌入层移植到鸿蒙上,确切地说,我们要通过鸿蒙原生提供的平台能力,重新实现一遍Flutter嵌入层。

对于Flutter嵌入层的适配,Flutter官方有一份不算详细的指南,实际操作起来成本很高。由于鸿蒙的业务开发语言仍然可用Java,在很多基础概念上与Android也有相似之处,我们可以从Android的实现入手,完成对鸿蒙的移植。

使用Appuploader简化开发流程

在开发过程中,使用合适的工具可以大大提高效率。Appuploader作为一款iOS开发助手,可以帮助开发者快速上传应用、管理证书和配置文件,简化了繁琐的发布流程。虽然Appuploader主要针对iOS开发,但其理念和功能设计对于鸿蒙系统的开发也有借鉴意义。通过类似的工具,开发者可以更专注于核心功能的开发,而不必在繁琐的配置和发布流程上耗费过多时间。

Flutter在鸿蒙上的适配

要完成Flutter在新系统上的移植,我们需要完整实现Flutter嵌入层要求的所有子模块,而从能力支持角度,渲染、交互以及其他必要的原生平台能力是保证Flutter应用能够运行起来的最基本的要素,需要优先支持。

1. 渲染流程打通

我们再来回顾一下Flutter的图像渲染流程。设备发起垂直同步(VSync)信号之后,先经过UI线程的渲染管线(Animate/Build/Layout/Paint),再经过Raster线程的组合和栅格化,最终通过OpenGL或Vulkan将图像上屏。这个流程的大部分工作都由框架层和引擎层完成,对于鸿蒙的适配,我们主要关注的是与设备自身能力相关的问题。

2. 交互能力实现

交互能力是支撑Flutter应用能够正常运行的另一个基本要求。在Flutter中,交互包含了各种触摸事件、鼠标事件、键盘录入事件的传递及消费。以触摸事件为例,Flutter事件传递的整个流程如下图所示:

iOS/Android的原生容器通过触摸事件的回调API接收到事件之后,会将其打包传递至引擎层,后者将事件传发给Flutter框架层,并完成事件的消费、分发和逻辑处理。同样,整个流程的大部分工作已经由Flutter统一,我们要做的仅仅是在原生容器上监听用户的输入,并封装成指定格式交给引擎层而已。

3. 其他必要的平台能力

为了保证Flutter应用能够正常运行,除了最基本的渲染和交互外,我们的嵌入层还要提供资源管理、事件循环、生命周期同步等平台能力。对于这些能力Flutter大多都在嵌入层的公共部分有抽象类声明,只需要使用鸿蒙API重新实现一遍即可。

总结和展望

通过上述的构建和适配工作,我们以极小的开发成本实现了Flutter在鸿蒙系统上的移植,基于Flutter开发的上层业务几乎不做任何修改就可以在鸿蒙系统上原生运行,为迎接鸿蒙系统后续的大规模推广也提前做好了技术储备。

当然,故事到这里并没有结束。在最基本的运行和交互能力之上,我们更需要关注Flutter与鸿蒙自身生态的结合:如何优雅地适配鸿蒙的分布式技术?如何用Flutter实现设备之间的快速连接、资源共享?现有的众多Flutter插件如何应用到鸿蒙系统上?未来MTFlutter团队将在这些方面做更深入的探索,因为解决好这些问题,才是真正能让应用覆盖用户生活的全场景的关键。

参考文献

  • 华为开发者大会2020
  • 鸿蒙系统文档
  • Flutter架构概述
  • Flutter引擎嵌入指南

作者简介:杨超,2016年加入美团外卖技术团队,目前主要负责MTFlutter相关的基础建设工作。


http://www.kler.cn/a/610944.html

相关文章:

  • 深度解析:4G路由器CPE性能测试的五大关键指标
  • 影刀魔法指令3.0:开启自动化新篇章
  • 编写简单的小程序
  • SpringCloud入门、搭建、调试、源代码
  • Flink 常用及优化参数
  • Serverless架构的应用场景
  • 文件上传的小点总结
  • 自然语言处理(11:RNN(RNN的前置知识和引入)
  • 学习爬虫的第二天——分页爬取并存入表中
  • NO.58十六届蓝桥杯备战|基础算法-枚举|普通枚举|二进制枚举|铺地毯|回文日期|扫雷|子集|费解的开关|Even Parity(C++)
  • Spring MVC 配置详解与入门案例
  • 3ds Max 2026 新功能全面解析
  • husky的简介以及如果想要放飞自我的解决方案
  • Linux centos 7 vsftp本地部署脚本
  • 图灵300题-41~60-笔记003
  • vue3项目使用 python +flask 打包成桌面应用
  • CMake 构建的Qt 项目中的构建套件的配置
  • 《精益创业实战》第2章“对需求性进行压力测试” 总结
  • 破局离散制造:主数据管理驱动数字化转型的实践与启示
  • Git撤回操作全场景指南:未推送与已推送,保留和不保留修改的差异处理