Flutter OHOS 架构介绍

发布时间:2026/9/5 2:18:22
Flutter OHOS 架构介绍 1. 概述Flutter OHOS 的本质不是重新设计一套 Flutter 框架而是在保留 Flutter Framework 与 Engine Core 主体能力的前提下补齐 OpenHarmony 平台的宿主、渲染、输入、资源、生命周期和无障碍适配层。从代码归属上看Flutter OHOS 主要由三部分组成Flutter 应用与 Framework开发者 Dart 业务代码以及 Flutter 上层框架能力。Flutter Engine 通用核心Shell、Rasterizer、RuntimeController、Dart VM、Platform Channel等平台无关实现。OpenHarmony 适配层ArkTS Embedding、NAPI 桥接和 Native Embedder共同把 Flutter 运行时接入 OpenHarmony 的UIAbility、WindowStage、XComponent、OH_NativeWindow、OH_NativeVSync、ResourceManager、无障碍服务等系统能力。OHOS 适配层主要集中在两个目录ArkTS Embeddingengine/src/flutter/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/Native Embedderengine/src/flutter/shell/platform/ohos/因此Flutter OHOS 的架构可以理解为一套“ArkTS 宿主层 NAPI 桥接层 C Embedder 层”的平台实现它向上承接 Flutter Engine向下对接 OpenHarmony 系统能力。2. 整体架构2.1 分层视图2.1.1 静态分层图flowchart TB subgraph L1[L1 Flutter 应用层] DartApp[Dart Application] Framework[Flutter Framework] end subgraph L2[L2 Flutter Engine Core] EngineCore[Shell / RuntimeController / Animator / Rasterizer / Dart VM] end subgraph L3[L3 OpenHarmony Embedding] subgraph ArkTS[ArkTS Embedding] ArkTSHost[FlutterAbilityAndEntryDelegate / FlutterEngine / FlutterView] end subgraph Bridge[NAPI Bridge] NapiBridge[FlutterNapi / PlatformViewOHOSNapi] end subgraph Native[Native Embedder (C)] NativeEmbedder[OhosMain / OHOSShellHolder / PlatformViewOHOS / OHOSSurface / VsyncWaiterOHOS] end end subgraph L4[L4 OpenHarmony System] SystemServices[UIAbility / WindowStage / XComponent / NativeWindow / NativeVSync / ResourceManager / Accessibility] end DartApp--Framework Framework--EngineCore EngineCore--ArkTSHost EngineCore--NapiBridge EngineCore--NativeEmbedder ArkTSHost--NapiBridge NapiBridge--NativeEmbedder NativeEmbedder--SystemServicesL1 负责业务与 Flutter 声明式 UI。L2 负责 Dart 运行时、帧调度和渲染核心。L3 负责把 Flutter 的平台抽象映射到 OHOS 宿主、窗口、输入、资源和系统服务。L4 提供 OpenHarmony 原生能力。2.1.2 关键交互图flowchartLRsubgraphEngine[Flutter Engine Core]Shell[Shell]Animator[Animator]Rasterizer[Rasterizer]Runtime[RuntimeController] end subgraphEmbedder[OpenHarmony Embedding]PlatformView[PlatformViewOHOS]VSync[VsyncWaiterOHOS]Surface[OHOSSurface / OHOSContext]MessageHandler[PlatformMessageHandlerOHOS / FlutterNapi] end subgraphSystem[OHOS System]NativeVSync[OH_NativeVSync]NativeWindow[OH_NativeWindow / RenderService]Host[UIAbility / WindowStage / XComponent] endShell--|创建并持有平台抽象|PlatformViewAnimator--|请求 VSync|VSyncVSync--|注册/接收帧时序|NativeVSyncRasterizer--|创建 Surface / 提交帧|SurfaceSurface--|Present / SwapBuffers|NativeWindowRuntime--|Platform Channel|MessageHandlerMessageHandler--|转发宿主与插件消息|HostFlutter Engine Core与OpenHarmony Embedding的关系主要包含四条主线平台抽象主线Shell - PlatformViewOHOS帧调度主线Animator - VsyncWaiterOHOS - OH_NativeVSync渲染提交主线Rasterizer - OHOSSurface/OHOSContext - OH_NativeWindow平台消息主线RuntimeController - PlatformMessageHandlerOHOS / FlutterNapi - ArkTS 宿主2.2 按功能划分Flutter OHOS 也可以按功能拆成五层层次代表实现主要职责Flutter 应用代码业务 Dart 代码描述页面、状态、路由和业务逻辑Flutter FrameworkWidgets、Rendering、Scheduler、Services构建 Widget/Element/RenderObject 树驱动布局、绘制与平台通道Flutter Engine 通用核心Shell、Dart VM、RuntimeController、Rasterizer承载 Dart 运行时、帧调度、场景构建与渲染提交OpenHarmony 适配代码ArkTS Embedding NAPI Native Embedder对接 Ability、XComponent、输入、纹理、VSync、无障碍、资源和系统通道OpenHarmony OS 能力UIAbility、WindowStage、OH_NativeWindow、OH_NativeVSync、ResourceManager提供窗口、图形缓冲、显示时序、资源和系统服务这里最关键的结论是Flutter OHOS 的平台差异主要集中在第四层Flutter Framework 和 Engine Core 主体仍然遵循上游 Flutter 的分层设计。3. 核心对象与职责3.1 ArkTS Embedding核心对象位置职责FlutterAbilityAndEntryDelegateembedding/ohos/FlutterAbilityAndEntryDelegate.ets串联 Ability 生命周期、引擎创建、视图创建、首轮 Dart 启动和页面显示/隐藏FlutterEngineGroupembedding/engine/FlutterEngineGroup.ets管理首引擎创建与后续spawn复用 VM 和共享资源FlutterEngineembedding/engine/FlutterEngine.ets封装DartExecutor、系统通道、插件注册、FlutterRenderer、PlatformViewsControllerFlutterViewview/FlutterView.etsArkTS 视图容器负责XComponent绑定、Viewport 同步、键鼠输入、首帧监听、系统避让区同步FlutterRendererembedding/engine/renderer/FlutterRenderer.ets纹理注册与外部纹理管理入口PlatformViewsControllerplugin/platform/PlatformViewsController.ets管理 ArkTS 原生视图嵌入、纹理模式与混合布局3.2 NAPI 桥接层核心对象位置职责FlutterNapiembedding/engine/FlutterNapi.etsArkTS 对 Native 的总入口负责初始化、attach、spawn、平台消息、viewport、纹理、无障碍和XComponent绑定PlatformViewOHOSNapinapi/platform_view_ohos_napi.cppC NAPI 导出层接收 ArkTS 调用并转发给OHOSShellHolder/PlatformViewOHOS3.3 Native Embedder核心对象位置职责OhosMainohos_main.cpp解析 Shell Args生成Settings选择渲染后端完成引擎全局初始化OHOSShellHolderohos_shell_holder.cpp创建ThreadHost、Shell、PlatformViewOHOS、注册图像解码器管理引擎生命周期PlatformViewOHOSplatform_view_ohos.cpp平台适配核心负责 Surface、Viewport、Platform Message、纹理、输入、生命周期和无障碍桥接XComponentAdapter/XComponentBaseohos_xcomponent_adapter.cpp管理多个XComponent实例及其 Surface/输入/无障碍回调VsyncWaiterOHOSvsync_waiter_ohos.cpp对接OH_NativeVSync驱动 Flutter 帧调度并接入刷新率投票OHOSSurface/OHOSContextsurface/*、context/*管理图形上下文、窗口表面、Swapchain / EGLSurface 与 GPU SurfaceOHOSAssetProviderohos_asset_provider.cpp从 HAP 原始资源中提供 Flutter 资产SemanticsBridgeaccessibility/ohos_semantics_bridge.cpp维护 Flutter 语义树与 OpenHarmony 无障碍事件之间的映射4. 线程模型Flutter OHOS 沿用了 Flutter 的多线程运行时模型但又叠加了 ArkTS 主线程和 OpenHarmony 系统线程约束。4.1 线程组成线程主要来源核心职责ArkTS 主线程OpenHarmony 应用主线程UIAbility、WindowStage、FlutterView、ArkTS 插件、窗口事件、系统回调Platform Thread当前平台消息循环NAPI 回调落点、平台消息分发、部分宿主逻辑协同UI ThreadOHOSShellHolder创建Dart Isolate 调度、动画帧生产、Framework Build/Layout/PaintRaster ThreadOHOSShellHolder创建GPU Surface 创建、场景栅格化、SwapBuffers / PresentIO ThreadOHOSShellHolder创建资源加载、图片解码、部分 VSync 投票和后台任务4.2 OHOS 线程适配特点OHOSShellHolder会显式创建ThreadHost至少包含 Raster 和 IO 线程当未启用merged_platform_ui_thread时还会单独创建 UI 线程。OHOS 版本为 UI 线程和 Raster 线程设置了更高 QoS优先级分别映射到QOS_USER_INTERACTIVE以保证首帧和交互流畅度。VsyncWaiterOHOS在 UI 线程上注册OH_NativeVSync_RequestFrameWithMultiCallbackVSync 回调到来后再唤醒 Flutter UI 帧流程。ArkTS 主线程并不直接承担 Flutter 引擎渲染任务它主要负责宿主 UI、生命周期和系统事件收集然后经由 NAPI 进入 Flutter 运行时。4.3 线程模型Flutter OHOS 更接近 Flutter 原生 Embedder 设计核心是Platform / UI / Raster / IO。这意味着 Flutter 的布局、绘制和栅格化天然分层。5. 启动流程Flutter OHOS 的启动可以拆成四个阶段。5.1 阶段一Loader 与引擎全局初始化ArkTS 侧通过FlutterInjector获取FlutterLoader和FlutterNapi。FlutterLoader.startInitialization()加载FlutterApplicationInfo预取默认字体并在 Debug 模式下把kernel_blob.bin、VM snapshot、isolate snapshot 从 HAP 复制到应用私有目录。FlutterLoader.ensureInitializationComplete()组装 Shell Args例如 ICU、资源缓存、Impeller 开关、AOT/JIT 资源路径等。FlutterNapi.init()进入 Native调用OhosMain::NativeInit()生成 FlutterSettings并确定 OHOS 侧渲染后端软件渲染kSoftwareSkia OpenGL ESkOpenGLESImpeller VulkankImpellerVulkan5.2 阶段二FlutterEngine 创建或复用FlutterAbilityAndEntryDelegate.setupFlutterEngine()决定使用缓存引擎、自定义引擎、缓存FlutterEngineGroup还是新建引擎组。首个引擎通过FlutterEngineGroup.createAndRunEngineByOptions()创建FlutterEngine初始化DartExecutor、Renderer、系统通道、插件注册器。FlutterNapi.attachToNative()调用 Nativeattach。Native 侧创建OHOSShellHolder、Shell和PlatformViewOHOS。后续引擎通过spawn()创建共享 VM 和部分底层资源但拥有独立 Dart Isolate。5.3 阶段三FlutterView 与 XComponent 绑定FlutterAbilityAndEntryDelegate.createView()创建FlutterView。FlutterView.attachToFlutterEngine()把 viewId 绑定到FlutterEngine。FlutterNapi.xComponentAttachFlutterEngine()进入 Native由XComponentAdapter将XComponent与具体shellHolderId建立关联。当XComponent的OnSurfaceCreated回调触发时Native 会拿到OH_NativeWindow并调用PlatformViewOHOS::NotifyCreate()。PlatformViewOHOS在 Raster 线程上把OH_NativeWindow交给OHOSSurface完成 onscreen surface 或 swapchain 的建立。5.4 阶段四首帧调度与显示Shell通过VsyncWaiterOHOS::AwaitVSync()等待OH_NativeVSync。VSync 到来后UI 线程驱动 Flutter Framework 完成 Build/Layout/Paint生成 LayerTree/DisplayList。Raster 线程调用CreateRenderingSurface()由OHOSSurface创建 GPU Surface 并提交渲染。最终图像通过OH_NativeWindow提交给RenderService。首帧完成后Native 通过FlutterNapi.onFirstFrame()回调 ArkTS再由FlutterView.onFirstFrame()通知宿主。6. 渲染架构6.1 渲染后端选择Flutter OHOS 当前支持三种渲染模式软件渲染兜底路径主要用于特殊场景。Skia OpenGL ES传统 GPU 路径。Impeller VulkanOHOS 的重点优化路径当前也是默认高性能路径。PlatformViewOHOS在创建时会根据Settings.ohos_rendering_api构造对应的OHOSContext与OHOSSurfaceOhosContextGLSkiaOhosSurfaceGLSkiaOHOSContextVulkanImpellerOHOSSurfaceVulkanImpellerOHOSSurfaceSoftware6.2 渲染提交链路sequenceDiagramautonumber participantArkTSasFlutterViewparticipantNAPIasFlutterNapiparticipantPVasPlatformViewOHOSparticipantVSyncasVsyncWaiterOHOSparticipantUIasUIThreadparticipantRasterasRasterThreadparticipantSurfaceasOHOSSurfaceparticipantWindowasOH_NativeWindowparticipantRSasRenderServiceArkTS-NAPI: setViewportMetrics / updateSize / updateDensityNAPI-PV: nativeSetViewportMetricsUI-VSync:AwaitVSync()VSync--UI: frame_time / target_timeUI-UI:Build/Layout/PaintUI-Raster: submitLayerTreeRaster-PV:CreateRenderingSurface()PV-Surface:CreateGPUSurface()Raster-Surface:Draw/SubmitSurface-Window:SwapBuffers/PresentWindow-RS: queueBuffer6.3 OHOS 渲染适配特点FlutterView会持续同步显示尺寸、像素密度、折叠屏特征、系统避让区、键盘区域和手势区域统一汇总为 ViewportMetrics。PlatformViewOHOS会缓存native_window支持 surface rebuild 和窗口变化后的上下文重建。OHOSSurfaceVulkanImpeller支持预热GPUSurface减少首帧前创建 Vulkan surface / swapchain 的冷启动成本。VsyncWaiterOHOS集成了刷新率感知与投票机制可与 LTPO 动态刷新率协同。7. 通信机制Flutter OHOS 存在两条核心通信链路。7.1 Dart 与 ArkTS/Native 的平台消息链路Dart Platform Channel - Engine PlatformMessage - PlatformMessageHandlerOHOS - FlutterNapi / ArkTS handler - ArkTS plugin orsystemservice反向链路则由 ArkTS 调用FlutterNapi.dispatchPlatformMessage()或dispatchEmptyPlatformMessage()经PlatformViewOHOSNapi转发到PlatformViewOHOS::DispatchPlatformMessage()再送回 Dart。7.2 系统通道与宿主通道FlutterEngine初始化时会创建一组系统通道包括LifecycleChannelNavigationChannelTextInputChannelPlatformChannelSystemChannelLocalizationChannelAccessibilityChannelSettingsChannelDisplayMetricsChannelNativeVsyncChannel这使得 OHOS 宿主可以把生命周期、路由、键盘、系统设置、刷新率、本地化和无障碍能力注入 Flutter Framework。8. 输入、平台视图与纹理8.1 输入事件输入链路以XComponent为源头OH_NativeXComponent callback - XComponentBase - OhosTouchProcessor - PointerDataPacket - PlatformViewOHOS - Flutter Engine具体包括触摸事件转换为 FlutterPointerDataPacket鼠标事件支持按键、移动、离开、滚轮轴事件API 15 使用原生轴事件处理滚动键盘事件ArkTS 侧由KeyboardManager、TextInputPlugin和系统通道协同处理OhosTouchProcessor还对 OpenHarmony 某些重复 down/up 事件做了过滤避免多指场景下手势状态异常。8.2 平台视图Flutter OHOS 的平台视图能力由 ArkTS 侧PlatformViewsController主导实现方式更偏向“ArkUI 视图编排 Flutter 纹理/布局协同”。它负责创建和销毁平台视图管理平台视图尺寸与偏移维护PlatformViewWrapper通过TextureRegistry/FlutterRenderer对接纹理模式把 ArkTS 原生节点挂入 Flutter 页面组合结果中8.3 外接纹理Native 侧通过OHOSExternalTexture统一外部纹理抽象并按后端拆分为OHOSExternalTextureGLOHOSExternalTextureVulkan典型场景包括视频、相机、PixelMap 和 NativeImage。ArkTS 侧通过FlutterRenderer注册纹理Native 侧则负责创建生产者窗口、接收帧可用回调并驱动 Flutter 重绘。9. 生命周期、资源与无障碍9.1 生命周期同步ArkTS 侧FlutterAbilityAndEntryDelegate会根据onShow、onHide、onPaused、onResumed、窗口焦点变化等事件通过LifecycleChannel向 Flutter 下发生命周期状态。Native 侧PlatformViewOHOS会监听flutter/lifecycle平台消息并执行本地 GPU 资源回收策略。9.2 资源管理Flutter OHOS 的资源策略主要体现在三点OHOSAssetProvider直接从 HAP 的 raw assets 中提供 Flutter 资源。OHOSImageGenerator接入 OpenHarmony 图像解码能力优先使用系统硬解码路径。PlatformViewOHOS在生命周期切换时支持 GPU reclaim前台恢复kRestore后台/隐藏/分离kAggressive这套策略的目标是降低后台 DMA buffer、纹理和 onscreen context 占用同时在恢复前台时尽快重建渲染面。9.3 无障碍OHOS 无障碍链路由 ArkTS 与 Native 协同完成ArkTS 侧监听系统无障碍开关变化并通过FlutterNapi.accessibilityStateChange()下发Native 侧SemanticsBridge维护 Flutter 语义树XComponentBase负责注册ArkUI_AccessibilityProviderAPI 15 场景下MultiInstanceXCompAccessibility支持多XComponent实例的无障碍处理因此Flutter Framework 生成的语义节点可以映射为 OpenHarmony 可识别的无障碍节点与事件。10. 多引擎与架构特征总结Flutter OHOS 的几个关键架构特征如下适配层边界清晰。Flutter Framework 和 Engine Core 基本保持通用实现OHOS 差异集中在 ArkTS Embedding、NAPI 和 Native Embedder。宿主模型贴合 OpenHarmony。以UIAbility WindowStage XComponent作为宿主容器而不是照搬 Android Activity/View 模型。渲染链路明确。FlutterView负责宿主侧窗口与 viewport同步进入PlatformViewOHOS后由OHOSSurface和OHOSContext完成 GPU 提交。多引擎能力完整。FlutterEngineGroup、spawn()、preDraw()和预热机制使多页面、多实例场景具备较好的扩展性。平台能力融合较深。输入、刷新率投票、外部纹理、折叠屏特征、系统避让区和无障碍都已纳入平台实现。综合来看Flutter OHOS 并不是简单把 Flutter 跑在鸿蒙上而是实现了一套符合 OpenHarmony 应用模型和系统能力边界的 Flutter Embedder 体系。这套体系向上保持 Flutter 的开发范式不变向下则通过 ArkTS 与 Native 双层适配完成对 OpenHarmony 图形、输入、资源和系统服务的深度接入。