Rust
登陆【华为鸿蒙】操作系统之Native
模块开发
名词解释
【鸿蒙操作系统】的英文全名是
Open Harmony Operation System
。正文将以其首字母缩写词ohos
引用该词条。【鸿蒙软件开发工具包】的英文全名是
Open Harmony Software Development Kit
。正文也将以它的首字母缩写词ohsdk
引用该词条。DevEco Studio IDE
是【华为】为鸿蒙应用程序开发免费提供的集成开发环境。它的最新稳定版内置了ohsdk 3.1.0 (API v9)
。【
Native
模块】是指由遵循了ArkTs NAPI
接口规范的C/Cpp/Rust
程序经交叉编译输出的链接库.so
文件。
前言
到写文章时止,虽然华为技术团队既未将rustup
工具链无缝集成入DevEco Studio IDE
也未提供ArkTs + Rust
的“一站式”混合编程体验,但Rust
登陆ohos
依旧势不可挡,因为相较于Rust
带来的生产效率收益(参照c / cpp
),搭建交叉编译环境的人工成本真的微不足道。甚至,求助于【操作系统镜像】或Docker
技术,@Rustacean 还能避免这类重复性劳动的再次发生。
为了填补DevEco Studio IDE
与rustup
工具链之间的“窄沟”,仅有两步操作需被执行:
搭建面向
ohos
的交叉编译环境。
限于作者
dev box
是Windows 11
,所以本篇文章仅分享从Windows
至ohos
的交叉编译环境搭建心得。
将交叉编译输出的.so
文件注入DevEco Studio
工作流。
搭建Windows
➞ ohos
交叉编译环境
鉴于华为硬件产品的三款主流CPU
架构,@Rustacean 需同时准备三套交叉编译方案,分别是:
面向
64
位ARM CPU
的aarch64-unknown-linux-ohos
方案。面向
32
位ARM CPU
的armv7-unknown-linux-ohos
方案。面向
64
位AMD / Intel CPU
的x86_64-unknown-linux-ohos
方案。
前两套方案是为【真机】设备提供动态链接库/Native
模块;而后一套方案则是服务于手机模拟器(虚拟机)的。
上表中Triple
的信息描述格式统一是:
<CPU架构><CPU子架构>-<厂商>-<操作系统>-<应用程序二进制接口格式>
于是,armv7-unknown-linux-ohos
应被读作
【厂商】栏的unkown
是Mozilla
公司的“锅”,而不是我定的。就我本意,这一栏馁馁的是汉语拼音HuaWei
。
下面上干货了...
第一步,给ohsdk
补装native
组件
DevEco Studio IDE
的内置ohsdk
位于%LocalAppData%\Huawei\Sdk\openharmony\<API 版本号>
目录下,但其初始安装却缺失了native
组件(— 可能是因为这个模块太大了,超过2GB
)。所以,@Rustacean 需要
补装
native
组件记住
ohsdk
对应的【API
版本号】,因为后续配置得用。
具体步骤
打开
DevEco Studio IDE
若出现的是【欢迎界面】,就从菜单
Configure
➞Settings
,打开Settings
对话框若出现的是【工程界面】,就从菜单
File
➞Settings
,打开Settings
对话框从对话框左侧选择
SDK
;从右侧查看Platform
选项卡下面的内容寻找并记忆被勾选的【
SDK
版本号 (API
版本号)】。比如,下图中的3.1.0 (API 9)
。勾选
native
复选框点击
OK
按钮等待
native
组件安装完成 — 耐心点儿,等待时间可不短
待上述操作都正常完成之后,便可见如下所示的新目录结构
第二步,重新编译Rust
标准库
之所以把事情搞这么大是因为Mozilla
厂方并没有为ohos
提供预编译的【标准库】二进制文件。于是,尽管ohos
已被纳入了rustc
交叉编译支持清单(请见下图)
,但直接执行交叉编译指令
cargo build --release --target=aarch64-unknown-linux-ohos
还是会遭遇失败和看到E0463
号错误