首页/新闻资讯/正文详情

Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop

发布时间:2026/11/5 3:51:18 来源:云帆数科 栏目:资讯中心
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
最近刚好有网友聊这个就展开聊聊吧严格来说Direct Native Interop确实不算是最近更新的 整个时间线大概类似2024 年Dart 3.5 开始在完善 C、Java、Kotlin、Objective-C 的直接互操作能力2025 年 5 月Dart 3.8 正式宣布 FFIgen、JNIgen 的 Direct Native Interop 早期体验计划2026 年官方文档已经把 C、Java、Objective-C/Swift 和 JavaScript 的互操作方式整合到 dart.dev/interop同时开始持续完善相关工具链当然这两年确实变化很多比如调用路径变了Dart 可以绕开传统 Platform Channel 的消息传递流程直接通过 FFI/JNI 调用原生方法代码生成方式变了FFIgen 和 JNIgen 可以根据原生接口生成 Dart Binding开发者不需要自己维护 Kotlin、Swift 桥接代码的工作Flutter 的线程架构也配合做了调整UI 线程和 Platform 线程的合并整个聊过很多次了特别是 2026 年多了一个 Pigeon 29这个版本正式加入了实验性的 FFI/JNI Direct Native Interop 支持也就是 Native Interop 调用系统的实现应该差不多要规模化落地了。也就是Dart - 生成的 Binding - JNI / FFI - Kotlin / Swift 这个双向路径以后会是主流。你现在其实也可以在 Pigeon 配置里开启ConfigurePigeon( PigeonOptions( kotlinOptions: KotlinOptions(useJni: true), swiftOptions: SwiftOptions( useFfi: true, ffiModuleName: Runner, ), ), )然后运行dart run pigeon,工具就会进一步调用jnigen/ffigen生成对应的 Kotlin、Swift 桥接代码和 Dart Binding。所以其实 Direct Native Interop 很早就有了不过 9 月之后已经开始进入 Pigeon。对比MethodChannel / 传统 PigeonDirect FFI / JNI调用方式发送消息等待结果调用生成的原生绑定方法编解码StandardMessageCodec原生类型、对象引用及必要转换Flutter Engine 消息通道经过不经过同步调用Dart 侧异步等待支持同步调用线程通过消息机制调度在调用者所在 OS 线程执行数据传递编码、解码可能多次复制减少复制但不保证零拷贝开发难度低生态成熟绑定生成、生命周期、构建更复杂Pigeon 直连支持Android、iOS、macOS、Windows、Linux 的传统通道目前为 Android、iOS、macOS实验性比如用了 JNIgen 后就可以直接根据 Java 接口生成 Dart Binding你就可以像下面这样这段 Dart 调用会通过 JNI 直接走到 Java VM 执行import example.dart; // JNIgen 生成的 Binding ​ void main() { print(Example.sum(17, 25)); // 42 }而且 FFIgen 可以把 Objective-C API 直接变成 Dart API 比如用AVAudioPlayer做例子FFIgen 读取AVAudioPlayer.h生成对应 Dart Binding 后就可以这样操作原生对象final fileUrl NSURL.fileURLWithPath( NSString(/path/to/audio.mp3), ); ​ final player AVAudioPlayer.alloc().initWithContentsOfURL(fileUrl); ​ player?.play();不过 Swift 比 Objective-C 麻烦一些因为 Dart FFI 面向 C ABI所以目前还是需要通过 Objective-C 兼容接口衔接 Swiftobjc public class SwiftClass: NSObject { objc public func sayHello() - String { return Hello from Swift! } }另外 Dart 3.13 之前也聊过现在加入了RecordUse和package:record_use可以让原生 FFI Binding 参与 到 AOT 编译期间的可达性分析。以前 Dart 层的没有用包装函数可以被 Tree Shaking 删除但 Native Library 需要整体打包现在配合 Link Hook 和支持裁剪的原生工具链就可以进一步剔除没有用到的 Native Symbol从而优化产物大小。这对依赖 SQLite、加密库、音视频库的插件也有意义不过它需要相应的构建和链接配置不是说升级 Dart 后任何原生库都会自动完成裁剪。总体里说这个功能支持是非常不错的就是拖的有点久了。

相关推荐

【资源自取】CraxsRat 7.4V3:远程桌面 3 步连上,跨平台远程控制工具完整指南
【资源自取】CraxsRat 7.4V3:远程桌面 3 步连上,跨平台远程控制工具完整指南

【资源自取】CraxsRat 7.4V3:远程桌面 3 步连上,跨平台远程控制工具完整指南 CraxsRat 7.4V3 是一款远程控制工具,帮你在本地远程操作另一台 Windows、Linux 或 macOS 机器。维护多台服务器、经常帮家人朋友远程修电脑的人,都值得… · 2026/11/5 3:51:18

SAP abap-cleaner 不是 Pretty Printer,而是一套可自动执行的 Clean ABAP 重构引擎
SAP abap-cleaner 不是 Pretty Printer,而是一套可自动执行的 Clean ABAP 重构引擎

2026 年 6 月,SAP 的 abap-cleaner 仓库增加了正式的 Visual Studio Code 扩展。到了 2026 年 7 月发布的 v1.29.0,独立应用和 Visual Studio Code 扩展又开始携带最小化 JRE,安装门槛进一步降低。回头看这个项目 2023 年 4 月第一次开源时,它只有 57 条 cleanup rule 和 1… · 2026/11/5 3:51:18

小白程序员必看:收藏这5种方法,轻松构建企业大模型知识库
小白程序员必看:收藏这5种方法,轻松构建企业大模型知识库

企业大模型需要结合多种方法来获取和利用知识。本文介绍了五种主要方法:RAG(从外部知识中取回回答所需的证据)、GraphRAG(利用实体及关系处理跨文档关联和多跳问题)、PageIndex(在复杂长文档中定位并读取相… · 2026/11/5 3:50:18

360度评估工具计费方式解析:四种口径、四个必问项与成本折算方法
360度评估工具计费方式解析:四种口径、四个必问项与成本折算方法

更新时间:2026 年 10 月摘要 360度评估工具的计费方式可归纳为四种口径。选择哪种取决于企业用量的形状——被评人数、年度轮次与评价人构成三者共同决定成本结构。本文给出四种口径的适用边界、采购阶段必须确认的四项条款,以及用人力成本折算投入产出的… · 2026/11/5 5:31:08

稀土功能纤维的制备原理与功能特性
稀土功能纤维的制备原理与功能特性

稀土在很多人印象中,是用于永磁电机、催化剂、激光晶体的工业原料。但近两年,稀土正在以一种更贴近生活的方式进入日常——功能纤维。稀土如何“织”进衣服里稀土功能纤维的制备,并不是简单地把稀土粉末混入纺丝液。以包头稀土研究院发布的“… · 2026/11/5 5:31:08

10-03-互操作-JobSystem与GC隔离
10-03-互操作-JobSystem与GC隔离

JobSystem 与 GC 隔离篇章:10-核心技术-托管互操作篇 | 阅读时间:约 35 分钟一、引言Unity Job System 要求 Job 中不能访问托管对象。这不是一个"推荐"规则,而是一条硬性约束——违反会导致运行时错误(InvalidOperatio… · 2026/11/5 5:31:08

从一家奶茶店讲透扫码登录:手机怎么让电脑登录
从一家奶茶店讲透扫码登录:手机怎么让电脑登录

目录 一、扫码登录要解决的真问题 二、完整流程:从生成二维码到换取登录态 三、动手写一个能跑的扫码登录后端 四、为什么是长轮询,而不是 WebSocket 五、一次领取:三层保护缺一不可 六、状态机:pending 到 confirmed 到 con… · 2026/11/5 5:31:08

LInux | sudo 与 su 操作
LInux | sudo 与 su 操作

sudo 与 su 操作手册 目录 sudoers 配置sudo 常用操作sudo 安全机制sudo 高级用法安全规范故障排查同类工具对比su、sudo 环境与 PATH 行为 1 sudoers 配置 sudo 的权限控制依托 /etc/sudoers,文件默认权限 440。 不直接使用 vi、vim 编辑,语法错误会… · 2026/11/5 5:31:08

焊接还是压接?USB、DC 线焊点虚焊的判定与工艺边界
焊接还是压接?USB、DC 线焊点虚焊的判定与工艺边界

焊点是冶金连接,压接是冷变形机械连接,失效模式不同:压接坏了是电阻慢慢爬、通电发热;焊点坏了常常一次震动就断,而静态通电还是通的。判焊点好坏,第一判据是润湿角,不是「亮不亮」。大电流、强… · 2026/11/5 5:30:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码