Skip to content

常见问题

为什么最终产物的体积比 C++ 大 ?

事实上,目前看来 Rust 的构建产物体积普遍大于 C++ 的构建产物,不过随着项目功能和第三方库引入的增多,这个差距会逐渐变小。 你可以参考 min-sized-rust 项目来对你的项目进行一些构建优化。目前推荐开启 strip 和 lto 优化,基本配置如下所示:

toml
# Cargo.toml
[profile.release]
lto = true
strip = true

Option<T> 导致报错

对于一些比较旧的版本,使用Option<>语法会导致鸿蒙直接 crash,其实本质上是鸿蒙上面的 N-API 实现问题导致,在一些比较新的版本已经修复了。

如何将其他平台已有的动态/静态链接库迁移到鸿蒙系统?

首先我们需要明确的一点是:其他平台构建的动态/静态链接库无法直接在鸿蒙上面使用。举个例子:我们没有办法将构建的 iOS 平台的动态链接库在安卓上面使用,这个是同理的。

如果需要使用动态/静态链接库,就必须使用鸿蒙 SDK 提供的 native 能力进行重新编译适配,才能够正常使用。

假设你使用的动态链接库是第三方厂商提供的,如果没有源码请提需求给厂商进行适配,如果有源码可以自行重新编译构建适配。

你可以参考 OpenSSL 的鸿蒙适配来适配你的 SDK 。

为什么运行单元测试报错?

本质上这里的单元测试是构建了一个可执行程序,如果运行正常,那么意味着我们的代码是正确的。而 N-API 相关的代码都是 native 与上层虚拟机之间的通信代码并且是 HarmonyOS 平台的构建产物自然是不能够在你当前设备环境运行。

除此之外,与 Node.js 不同之处在于:Node.js 能够通过编写 JS/TS 文件来验证对应的能力是否正常。但是鸿蒙对应的单元测试现阶段强依赖于真机运行,因此同样无法跟 napi-rs 一样进行一些测试。