Avalonia 12正式发布:蓄势待发,迎接全新未来
距离我们发布 Avalonia 11.0 已经过去了 1007 天。在此期间,我们推出了 54 次更新,NuGet 下载量突破 930 万次,见证了 Avalonia 成长为最主流的跨平台.NET UI 框架。仅去年一年,全球就有 210 万个独立项目使用 Avalonia 完成了 1.22 亿次构建。简而言之,Avalonia 已成为跨平台.NET 开发的首选框架。
今天,我们正式发布 Avalonia 12。我们的目标是打造 Avalonia 历史上最扎实的基础版本,而我们完美达成了这一目标。
Avalonia 12.0 的设计理念
我想开诚布公地说明:Avalonia 12.0 是什么,以及我们刻意没有让它成为什么。
Avalonia 12 是一次对框架底层基石的战略性投入,核心聚焦于性能、稳定性和平台成熟度。我们深耕了那些 “看似枯燥” 的基础工作,目的是让后续所有版本的发布速度更快,同时能在这个坚实的底座上快速叠加真正令人兴奋的新特性。
我们为未来 18-24 个月的完整路线图打下了基础。并非每个大版本都需要追求噱头式的功能爆发。框架历史上最重要的工作,往往是那些能让未来两年的开发交付效率大幅提升的底层建设。而这正是 12.0 版本的核心价值。当然,这并不意味着我们没有带来任何激动人心的新东西!
桌面、嵌入式、移动端 —— 全平台一等体验
Avalonia 早已凭借出色的表现,成为构建桌面应用的最佳跨平台.NET UI 框架。如果你的目标是 Windows、macOS 和 Linux,它无疑是最优选择。但在移动开发领域,过去的普遍认知是需要另寻他法。而 Avalonia 12.0 正在彻底改变这一现状。
Avalonia 12 在 Android 平台实现了3 倍性能提升,引入了原生调度器实现,针对平台 GPU 和 CPU 做了专项优化,还推出了一套专为移动交互模式设计的完整页面导航系统。如今,它已成为移动优先应用开发中极具竞争力的选择。我们为.NET MAUI 开发 Avalonia 后端的经验,也让我们清晰地看到了移动平台最关键的功能缺口,而 Avalonia 12 已经全部补齐。再加上我们与谷歌 Flutter 团队合作,将 Impeller 渲染引擎引入.NET 生态,Avalonia 与其他所有.NET 跨平台方案之间的差距只会越来越大。
Avalonia 从诞生之初就采用了 “一次编写,处处一致” 的设计理念:统一的 XAML 语法、统一的渲染管线、统一的代码库。我们的自绘 UI 方案并非临时转向,而是经过了十年打磨,在数千个生产级应用中久经考验。12.0 版本将所有资源重新投入到这个核心基础上,让它在所有目标平台上都变得更快、更稳定、更强大。桌面、嵌入式、移动平台,无需任何妥协。
性能提升,用数据说话
在复杂视觉场景下,Avalonia 12 的帧率最高提升了1867%,接近原来的 20 倍。我们使用包含 35 万个独立视觉元素的场景进行了基准测试。而带来这一飞跃的渲染子系统优化,将惠及所有 Avalonia 应用,而非仅适用于极端场景。
但基准数据只能说明一部分问题。GitHub 用户 LaurentInSeattle 在测试候选版本后给出了这样的反馈:
所有内容的加载速度都明显变快了。应用更 “丝滑”、响应更及时。内存占用略有下降,垃圾回收的运行次数也减少了。空闲时不再有大约 0.5% 的 CPU 占用。所有元素的绘制速度都显著提升,用鼠标拾取和拖拽对象的体验更是有了质的飞跃!
底层的优化工作覆盖了方方面面:我们在 PresentationSource 中缓存了渲染缩放值,避免重复查询;当视觉元素不可见时,完全禁用动画处理;将默认窗口图标的加载延迟到窗口显示时再执行;彻底重构了合成器,带来了 1867% 的渲染吞吐量提升。此外,我们还默认启用了编译绑定,大多数应用无需修改一行代码,就能获得绑定性能的提升。更快的渲染意味着你的应用可以在更低配置的硬件上运行,降低部署成本;更低的空闲 CPU 占用意味着更长的电池续航;更好的绑定性能则让 UI 无需架构调整就能变得更灵敏。
升级耗时:数小时,而非数天
一位 Discord 用户在体验预览版 1 后,这样总结迁移体验:
必须夸一句,12.0 预览版 1 在我的首次测试中表现非常好。只需要做少量修改,主要是数据验证部分的变更,然后手动打补丁适配 IconPacks.Avalonia 和 AvaloniaEdit,之后一切就正常运行了。
我们在决定是否引入破坏性变更时极其审慎。本次变更主要包括:数据验证处理移至基类 Control(这是一次整体改进,但你会注意到这个变化)、为保持一致性进行的少量重命名(例如 SystemDecorations 改为 WindowDecorations),以及最终移除了一些已废弃的 API。但构建 Avalonia 应用的核心方式没有任何改变。
对于企业团队而言,这一点比任何单一功能都更重要。一次能在一个迭代内完成、能通过现有测试套件验证、能放心上线的升级,才是值得长期投入的框架与那些每次大版本升级都变成技术负债的框架之间的本质区别。
Android 平台:性能提升三倍
Android 平台的性能提升值得单独拿出来说,因为数据实在惊人:
启用 NativeAOT 后,启动时间从 1960ms 降至 460ms,提升 4 倍
滚动帧率从 42FPS 提升至 120FPS
动画稳定锁定 60FPS
空闲 CPU 占用从 0.20% 降至不足 0.01%,降低 20 倍 —— 这意味着应用一旦停止交互,就几乎不会消耗电量
这些提升并非来自某个单一的 “银弹”。我们基于 Looper 和 MessageQueue 为 Android 实现了原生的 IDispatcherImpl,让线程行为终于符合平台预期;针对帧超时的情况,对 CPU 和 GPU 利用率做了定向优化;移除了那些只会增加延迟却毫无益处的 OpenGL 同步调用;同时全面优化了表面重建、恢复后的安全区域内边距处理,以及围绕 AvaloniaActivity 的整个应用模型。
最终结果是:Android 平台上的 Avalonia 现在已成为性能敏感型应用的真正生产级平台。过去那些迫使团队做出不必要框架妥协的差距,已经被彻底抹平。
Linux 无障碍支持:.NET 生态先行者
Avalonia 12.0 是首个推出原生 Linux 无障碍后端的.NET UI 框架。
没有任何其他.NET 框架提供 Linux 平台的原生无障碍支持。我们实现了 AT-SPI2 后端,这意味着 Linux 上的 Avalonia 应用现在可以通过 Linux 桌面生态依赖的标准基础设施,与屏幕阅读器和辅助技术完美交互。
对于需要在 Linux 上部署到政府、医疗、教育或任何受监管环境的组织来说,无障碍支持是采购的硬性要求。而 Avalonia 现在是唯一能满足这一要求的.NET 框架。我们还为验证错误添加了自动化支持,并为汉堡菜单等控件增加了自动化地标,将无障碍支持从基础的屏幕阅读器功能,拓展到了结构化导航领域。
导航控件:无需再自行从零搭建
Avalonia 12.0 内置了完整的页面导航系统:通过 TabView 实现 ContentPage、DrawerPage、CarouselPage 和 TabbedPage,同时提供了用于页面视觉指示的 PipsPager 控件。支持带循环选择的手势导航,在触摸设备上体验自然流畅。页面支持对页眉、页脚、抽屉和图标进行完全模板化自定义。
过去,每个构建壳式导航的 Avalonia 团队都不得不自己编写和维护这些底层代码。而从 12.0 版本开始,这些功能开箱即用,并且具备完善的生命周期管理、页面切换时的焦点处理,以及与全新可主题化装饰系统的深度集成。专注于打造你的产品,而不是重复造导航轮子。
WebView 全面开源
在推出 Avalonia Accelerate 时,WebView 组件属于商业付费功能。而在 12.0 版本中,我们将其完全开源。
这是一项战略决策。将 WebView 置于付费墙之后,会在评估阶段给开发者制造障碍 —— 而这正是我们希望阻力为零的阶段。移除这一门槛后,会有更多团队完成评估,更多项目投入生产,整个生态也会发展得更快。
Avalonia WebView 使用各平台原生的网页渲染引擎:无需捆绑 Chromium,应用体积大幅减小,性能与操作系统原生体验完全一致。
Wayland 支持:底层基础已就绪
我们已经完成了支持 Wayland 的底层基础工作,目前已开放测试。我们没有在发布首日就向所有用户推送,以免在生产环境中出现各种边缘情况。相反,我们希望与少数真正有 Wayland 需求的用户合作,开展针对性的私有预览。
如果你的团队正在默认使用 Wayland 合成器的现代 Linux 发行版上部署 Avalonia 应用,请与我们联系。我们正在寻找合作伙伴,在正式全面可用之前,针对真实场景验证我们的实现。
可主题化客户端窗口装饰
Avalonia 12.0 引入了可主题化的客户端窗口装饰,并提供了无需应用主动开启的强制客户端装饰模式。你可以自定义窗口标题栏的样式,暴露平台允许的标题栏按钮操作,打造既符合各平台原生规范、又具备个性化的窗口体验。
调度器全面优化
Avalonia 12.0 新增了Dispatcher.CurrentDispatcher、Dispatcher.FromThread和AvaloniaObject.Dispatcher,让线程模型更贴近 WPF 开发者的使用习惯,同时保持了完全的跨平台性。我们还添加了Dispatcher.Yield和Dispatcher.Resume用于细粒度的消息处理控制,提供了显式的后台处理支持,并为Dispatcher.InvokeAsync实现了正确的执行上下文捕获。
焦点管理全新重构
Avalonia 12.0 对焦点管理进行了全面重构。
现在你可以在焦点变更发生前取消它;全新的焦点遍历 API 让你能完全控制键盘导航顺序;FocusManager 也已向开发者完全开放。
同时我们修复了一系列长期存在的 bug:核心的 GotFocus 和 LostFocus 事件处理不会再被跳过;触摸和笔输入的焦点变更会正确延迟到释放时才触发;当焦点被取消或重定向时,FocusManager.FocusedElement 会返回正确的值。
各平台专项优化
Avalonia.iOS 现已启用 Mac Catalyst 支持,实现 iOS 场景代理,适配现代应用生命周期管理。macOS 平台新增NativeDock.Menu API,支持在程序坞图标添加菜单项,修复 Metal 渲染清理问题,校正无障碍角色定义。Windows 平台阻止 DXGI 拦截 Alt+Enter 与 PrintScreen 快捷键,新增 WinForms 消息过滤器,优化混合应用的互操作性。
更精简的代码库
技术债务即是业务风险。Avalonia 12.0 对此高度重视。
我们将目标框架定为.NET 10 与 SkiaSharp 3.0,几乎所有项目移除 netstandard2.0 支持,停用 Direct2D1,终止 Tizen 支持,移除 Avalonia.Browser.Blazor,并彻底删除 BinaryFormatter 以强化安全性。我们启用 “警告视为错误” 机制,接入中央包管理系统,在测试套件与原生层全面启用可空注解,并将 JavaScript 构建从 Node.js 切换至独立运行的 Bun。
我们合并了冗余的内部接口,移除未使用的类与方法,将仅内部使用的类型严格设为非公开。更精简、更整洁的代码库意味着更少的漏洞、更快的构建速度、更便捷的社区贡献,以及所有基于 Avalonia 开发的项目更低的长期维护成本。
数百项漏洞修复
本次版本覆盖所有平台与子系统,修复了数百个独立漏洞:包括 ListBox 与 ItemsControl 的虚拟化边缘问题、macOS 的 Metal 渲染清理问题、Linux 下 X11 INCR 传输的剪贴板处理、Android 界面重建与存储查询、iOS 输入处理、字体粗细与拉伸匹配、RTL内容镜像、菜单内存泄漏等。
每一项修复,都意味着开发者不会再遇到相关生产问题,用户不会遭遇功能回退,无需提交技术支持工单。更高的稳定性直接降低运维风险,减少深夜紧急处理故障的情况。
团队壮大,开发提速
发布 Avalonia 11.0 时,我们的团队规模还很小。得益于 Devolutions 为期三年的赞助,以及产品收入的持续增长,团队规模已扩大一倍以上。如今,Avalonia UI 拥有 19 名成员。
更大的团队让我们能够同时推进深度底层优化与直观功能开发。AT-SPI2 无障碍后端、线程模型重构、渲染管线优化 —— 这些都是需要数月持续专注投入的工作。以我们当前的团队规模,既能完成这些核心任务,又不会耽误功能路线图推进或漏洞修复速度。当我们公布后续规划时,我们拥有充足的工程能力去落地实现。
文档全面升级
Avalonia 的文档篇幅增加了一倍多,新增了 125% 的指南,覆盖从入门到高级平台特定场景的所有内容。我们在文档中内置了 AI 聊天助手,提供上下文感知的解答;添加了交互式 XAML 预览器,可在浏览器中直接试验控件;同时重构了网站结构,让导航更快捷、学习路径更清晰。如果你一年前觉得我们的文档还有很多空白,现在不妨再回来看看。
未来展望
Avalonia 12.0 从一开始就定位为基础版本。性能优化、平台成熟度提升、API 清理、导航系统、无障碍基础设施 —— 所有这些工作,都为我们未来 18-24 个月的发展奠定了基础。我们在渲染、工具链和平台覆盖方面有着宏伟的计划,而 12.0 正是我们执行这些计划的坚实底座。
未来几个月,我们会公布更多路线图细节。现在,欢迎大家升级、测试,并向我们反馈你的使用体验。
开始使用
Avalonia 12.0 现已在 NuGet 上发布。更新你的包引用,构建并发布你的应用即可。如果你是 Avalonia 新手,安装.NET 模板后,就能从单一代码库构建出高性能、视觉一致的应用,同时支持 Windows、macOS、Linux、iOS、Android 和 WebAssembly。
我们也借本次发布的契机,重新梳理了 Avalonia Accelerate 品牌,以及我们的商业产品在整个生态中的定位。请访问 https://avaloniaui.net/blog/retiring-accelerate/ 了解详情。
1.22 亿次构建。210 万个项目。首个拥有原生 Linux 无障碍支持的.NET 框架。生态中最快的跨平台渲染引擎。桌面、嵌入式、移动全一等公民支持。以小时为单位的升级路径。Avalonia 不是 “正在成为” 跨平台.NET 的标准 —— 它已经是了。
感谢每一位贡献者、每一位 bug 报告者,以及每一位测试了预览版和候选版的社区成员。
