鸿蒙综合讨论/Avalonia 路线:.NET 自绘 UI 上鸿蒙

Avalonia 路线:.NET 自绘 UI 上鸿蒙

.NET 系桌面应用在 Linux 上的主力 UI 框架是 Avalonia,自绘引擎、跨平台野心与 Flutter 类似。把这类应用带上鸿蒙,Air 系列走出了 CSharp 与 Avalonia 的完整路线,像素绘图板工程是首个落地实例。

▍原理
路线核心是 NativeAOT:把 CSharp 程序集直接原生编译成 arm64 机器码,不再携带完整 CLR 运行时。渲染层接管 Avalonia 的平台接口,把它的合成器输出接到鸿蒙原生窗口;输入层把触摸事件回灌进 Avalonia 的事件系统。这样应用层的 XAML 与 CSharp 代码基本不动,只换底座。

▍路线特有的一族坑
Avalonia 路线的坑分布与 C 系框架很不一样。工具链侧有假绿家族:MSBuild 的多仓库条件编译、增量缓存、引用程序集不一致,会让构建显示成功但产物是旧的。AOT 边界上,反射与泛型的动态生成受限,序列化库的 object 槽位、运行时类型生成这类写法会被编译期压制,要逐个改造。运行时的典型问题有调度优先级饿死、字体对象空壳、触摸拖放直接崩等一族。渲染上则是软渲染没有确定性触发条件、双栅格浪费、按需渲染要五件套齐备。真实工程里最重的一课是窗口增长导致帧缓冲越界崩溃,这个 bug 直接关联应用市场驳回,最后靠系统窗口状态取证才定位。

▍适用场景
上游就是 CSharp 加 Avalonia 的应用,或团队 CSharp 资产重的项目。对这类项目,NativeAOT 路线上机后的性能与内存表现是可接受的,值得投入。

▍不建议的场景
想用 Avalonia 从零写鸿蒙应用的同学,直接用 ArkUI 更顺——这条路线的价值在存量迁移,不在新建。

▍真实用例
像素绘图板工程全流程可用,画布、图层、笔刷都在真机上工作,路线经验已整理成专门的参考文档。

免费无广告的安装包可以在官网下载体验。
楼主 7 天前
想参与讨论?登录 或 30 秒注册。