【社区投稿】Rust登陆华为鸿蒙操作系统之Native模块开发

本文介绍了如何使用Rust登陆华为鸿蒙操作系统进行Native模块开发,包括搭建交叉编译环境、模块注入工程的步骤,以及解决编译问题的方法。详细讲解了从环境准备到模块导出接口的全过程,旨在帮助开发者高效地进行鸿蒙OS的Rust开发。
摘要由CSDN通过智能技术生成

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 IDErustup工具链之间的“窄沟”,仅有两步操作需被执行:

  1. 搭建面向ohos的交叉编译环境。

  • 限于作者dev boxWindows 11,所以本篇文章仅分享从Windowsohos的交叉编译环境搭建心得。

将交叉编译输出的.so文件注入DevEco Studio工作流。

搭建Windows  ➞ ohos交叉编译环境

鉴于华为硬件产品的三款主流CPU架构,@Rustacean 需同时准备三套交叉编译方案,分别是:

  • 面向64ARM CPUaarch64-unknown-linux-ohos方案。

  • 面向32ARM CPUarmv7-unknown-linux-ohos方案。

  • 面向64AMD / Intel CPUx86_64-unknown-linux-ohos方案。

前两套方案是为【真机】设备提供动态链接库/Native模块;而后一套方案则是服务于手机模拟器(虚拟机)的。

0e6db510fdef2bb15deb442d05810136.png

上表中Triple的信息描述格式统一是:

<CPU架构><CPU子架构>-<厂商>-<操作系统>-<应用程序二进制接口格式>

于是,armv7-unknown-linux-ohos应被读作

bdc3e936c93fc3a315e084a9537925f9.png

【厂商】栏的unkownMozilla公司的“锅”,而不是我定的。就我本意,这一栏馁馁的是汉语拼音HuaWei

下面上干货了...

第一步,给ohsdk补装native组件

DevEco Studio IDE的内置ohsdk位于%LocalAppData%\Huawei\Sdk\openharmony\<API 版本号>目录下,但其初始安装却缺失了native组件(— 可能是因为这个模块太大了,超过2GB)。所以,@Rustacean 需要

  1. 补装native组件

  2. 记住ohsdk对应的【API版本号】,因为后续配置得用。

具体步骤
  1. 打开DevEco Studio IDE

  2. 若出现的是【欢迎界面】,就从菜单ConfigureSettings,打开Settings对话框

  3. 若出现的是【工程界面】,就从菜单FileSettings,打开Settings对话框

  4. 从对话框左侧选择SDK;从右侧查看Platform选项卡下面的内容

  5. 寻找并记忆被勾选的【SDK版本号 (API版本号)】。比如,下图中的3.1.0 (API 9)

    94bdfe399eefa3f8cec3b77d263c9c1e.png

  6. 勾选native复选框

  7. 点击OK按钮

  8. 等待native组件安装完成 — 耐心点儿,等待时间可不短

待上述操作都正常完成之后,便可见如下所示的新目录结构

d929755384809ad5957fd59298fafcb7.png

第二步,重新编译Rust标准库

之所以把事情搞这么大是因为Mozilla厂方并没有为ohos提供预编译的【标准库】二进制文件。于是,尽管ohos已被纳入了rustc交叉编译支持清单(请见下图)

1b35c8121bdcfb577bb7527628f96d28.png

,但直接执行交叉编译指令

cargo build --release --target=aarch64-unknown-linux-ohos

还是会遭遇失败和看到E0463号错误

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值