这是一个知乎的问题,布布的回答以及给出的他的实验项目:https://github.com/CeSun/OpenHarmony.Net
结论
开篇先说结论:
目前.Net完全具备可以在OpenHarmony系统上运行的能力
nativeaot最为简单,coreclr和mono理论支持,尚未验证
.Net对安卓和ios以及macos除了代码可以执行以外,通常还会为系统api以及开发框架做一层包装,以达到使用c#就可以做到原生开发的感觉,这套框架以前叫Xamarin.Android, Xamarin.iOS以及Xarmarin.MacOS, 现在更名为.Net xxx,请注意这层高级的封装在鸿蒙系统上还未适配(其他语言根本没有这套机制,所以他们号称适配鸿蒙仅仅是能在鸿蒙系统上运行,系统api与.Net现状一样仍然需要手动导入)。
类似于Avalonia这样的框架,由于没有适配鸿蒙,目前也是不支持的,但是.net已经具备这些框架适配鸿蒙的能力。
2. 详细情况目前已知鸿蒙系统完全可以调用标准的不依赖glibc的linux的so,而c#的nativeaot功能编译出的原生so也是不依赖glibc的,所以可以使用c#开发原生so,并在鸿蒙nativec++项目中导入(其实理想情况下这段代码可以省略,但是鸿蒙用了非标准的特性,即__attribute__((constructor)),可以在so加载时运行一个函数,类似DllMain用来做一些注册工作,目前.net上还没有找到类似的特性),并调用其中的函数:
在原本的native c++项目中,c++可以通过napi为arkts提供api,而借助于c#的p/invoke特性,在c#中也可以调用napi,并使用c#为arkts提供api:
注册函数
代码仓库:https://github.com/CeSun/OpenHarmony.Net