.NET Core 适配 鸿蒙HarmonyOS 的最新进展
2025-02-11 2896 0
.NET Core适配鸿蒙HarmonyOS的最新进展:
运行能力方面
目前.Net完全具备可以在OpenHarmony系统上运行的能力。其中,NativeAOT方式是较为可行的一种,它编译出的原生so不依赖glibc,可与鸿蒙系统的libc兼容,能在鸿蒙的原生项目中通过dlopen以及dlsym等函数调用C#中的入口函数。理论上CoreCLR和Mono也支持在鸿蒙上运行,但尚未经过验证。
已知问题及解决情况
Seccomp限制问题:鸿蒙系统使用seccomp限制危险的syscall调用,而.NET的运行时初始化时会调用__NR_get_mempolicy系统调用对numa支持进行检查,此系统调用不在鸿蒙的seccomp白名单中,导致直接宕机。解决办法是自行修改代码,将numa的函数全部修改为空函数。
虚拟内存申请过大问题:GC初始化时会申请大量虚拟内存,导致mmap返回Out Of Memory错误。可以通过设置环境变量“DOTNET_GCHeapHardLimit”将虚拟内存申请控制在约180G以下,或者修改源代码关掉USE_REGIONS宏来解决。
第三方库缺失问题:ICU、OpenSSL等第三方库可能缺失。解决方案是从Alpine上获取相关包,因为Alpine的libc是musl,其库在鸿蒙上大部分能使用;如果有cmake项目的库,可通过鸿蒙的CMake工具链编译。
ICU初始化失败问题:鸿蒙的ICU配置文件路径与默认路径不同,需要调用修改环境变量API,将ICU_DATA修改为/system/usr/ohos_icu,且要使用版本号为72的libICU库。
适配框架情况
.Net对安卓和ios以及macos除了代码可以执行以外,通常还会为系统api以及开发框架做一层包装以实现原生开发的感觉,这套框架以前叫Xamarin.Android、Xamarin.iOS以及Xarmarin.MacOS,现在更名为.Net xxx,但目前这层高级的封装在鸿蒙系统上还未适配。
类似于Avalonia这样的框架,由于没有适配鸿蒙,目前也是不支持的,但是.net已经具备这些框架适配鸿蒙的能力。
.NET Core适配鸿蒙HarmonyOS取得了一定进展,但仍面临一些问题待解决。随着技术不断发展,未来.NET Core在鸿蒙系统上的应用前景值得期待。