背景
Rust 是一門靜態(tài)強類型語言,具有更安全的內(nèi)存管理、更好的運行性能、原生支持多線程開發(fā)等優(yōu)勢。Rust 官方也使用 Cargo 工具來專門為 Rust 代碼創(chuàng)建工程和構(gòu)建編譯。 OpenHarmony 為了集成 C/C++ 代碼和提升編譯速度,使用了 GN + Ninja 的編譯構(gòu)建系統(tǒng)。GN 的構(gòu)建語言簡潔易讀,Ninja 的匯編級編譯規(guī)則直接高效。 為了在 OpenHarmony 中集成 Rust 代碼,并最大程度發(fā)揮 Rust 和 OpenHarmony 中原有 C/C++ 代碼的交互性,采用 GN 作為統(tǒng)一構(gòu)建工具,即通過 GN 構(gòu)建 Rust 源碼文件(xxx.rs),并增加與 C/C++ 互操作、編譯時 lint、測試、IDL 轉(zhuǎn)換、三方庫集成、IDE 等功能。同時擴展 gn 框架,支持接口自動化轉(zhuǎn)換,最大程度簡化開發(fā)。
基本概念

配置規(guī)則
OpenHarmony 提供了用于 Rust 代碼編譯構(gòu)建的各類型 GN 模板,可以用于編譯 Rust 可執(zhí)行文件,動態(tài)庫和靜態(tài)庫等。各類型模板說明如下:

配置 Rust 靜態(tài)庫示例
該示例用于測試 Rust 可執(zhí)行 bin 文件和靜態(tài)庫 rlib 文件的編譯,以及可執(zhí)行文件對靜態(tài)庫的依賴,使用模板 ohos_rust_executable 和 ohos_rust_static_library。操作步驟如下:
1.創(chuàng)建 build/rust/tests/test_rlib_crate/src/simple_printer.rs,如下所示:
//! simple_printer
/// struct RustLogMessage
pub struct RustLogMessage {
/// i32: id
pub id: i32,
/// String: msg
pub msg: String,
}
/// function rust_log_rlib
pub fn rust_log_rlib(msg: RustLogMessage) {
println!("id:{} message:{:?}", msg.id, msg.msg)
}
?
2.創(chuàng)建 build/rust/tests/test_rlib_crate/src/main.rs,如下所示:
//! rlib_crate example for Rust.
extern crate simple_printer_rlib;
use simple_printer_rlib::rust_log_rlib;
use simple_printer_rlib::RustLogMessage;
fn main() {
let msg: RustLogMessage = RustLogMessage {
id: 0,
msg: "string in rlib crate".to_string(),
};
rust_log_rlib(msg);
}
?
3.配置 gn 腳本 build/rust/tests/test_rlib_crate/BUILD.gn,如下所示:
import("http://build/ohos.gni")
ohos_rust_executable("test_rlib_crate") {
sources = [ "src/main.rs" ]
deps = [ ":simple_printer_rlib" ]
}
ohos_rust_static_library("simple_printer_rlib") {
sources = [ "src/simple_printer.rs" ]
crate_name = "simple_printer_rlib"
crate_type = "rlib"
features = [ "std" ]
}
?
4.執(zhí)行編譯得到的可執(zhí)行文件,運行結(jié)果如下:
./build.sh --product-name rk3568 --build-target build/rust/tests:tests --no-prebuilt-sdk hdc_std.exe shell mount -o rw,remount / hdc_std.exe shell file send test_dylib_crate /data/local/tmp hdc_std.exe file send libsimple_printer_dylib.dylib.so /system/lib hdc_std.exe shell # cd /data/local/tmp # chmod +x test_dylib_crate # ./test_dylib_crate id:0 message:"string in rlib crate"
?
配置 Rust 應(yīng)用系統(tǒng)庫示例
1.增加依賴
// GN 里增加依賴
ohos_rust_executable("test_dylib_crate") {
sources = [ "src/main.rs" ]
deps = [ ":simple_printer_dylib" ]
# 增加外部依賴
external_deps = [ "hilog:hilog_rust" ]
}
// bundle.json 里增加依賴
"components": [
"hilog"
],
?
2.增加調(diào)用
extern crate simple_printer_dylib;
use simple_printer_dylib::rust_log_dylib;
use simple_printer_dylib::RustLogMessage;
//! 增加引用
use std::ffi::{ c_char, CString };
use hilog_rust::{hilog, info, HiLogLabel, LogType};
const LOG_LABEL: HiLogLabel = HiLogLabel {
log_type: LogType::LogCore,
domain: 0xD002220,
tag: "TEST_RUST",
};
fn main() {
let msg: RustLogMessage = RustLogMessage {
id: 0,
msg: "string in rlib crate".to_string(),
};
rust_log_dylib(msg);
//! 增加調(diào)用
info!(LOG_LABEL, "Fnished enable all keys.");
}
?
3.運行測試
// 運行 # ./test_dylib_crate id:0 message:"string in rlib crate" // 查看hilog # hilog | grep Fnished 08-17 05:14:18.121 29293 29293 I C02220/TEST_RUST: Fnished enable all keys.
為了能讓大家更好的學(xué)習(xí)鴻蒙 (OpenHarmony) 開發(fā)技術(shù),這邊特意整理了《鴻蒙 (OpenHarmony)開發(fā)學(xué)習(xí)手冊》,希望對大家有所幫助:
《鴻蒙(Harmony OS)開發(fā)學(xué)習(xí)手冊》
入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用開發(fā)導(dǎo)讀(ArKTS)
2.……

HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統(tǒng)定義
2.技術(shù)框架
3.技術(shù)特性
4.系統(tǒng)安全

快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構(gòu)建第一個ArkTS應(yīng)用
3.構(gòu)建第一個JS應(yīng)用
4…

開發(fā)基礎(chǔ)知識:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用基礎(chǔ)知識
2.配置文件
3.應(yīng)用數(shù)據(jù)管理
4.應(yīng)用安全管理
5.應(yīng)用隱私保護
6.三方應(yīng)用調(diào)用管控機制
7.資源分類與訪問
8.學(xué)習(xí)ArkTS
9…

基于ArkTS 開發(fā):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發(fā)
2.UI開發(fā)
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網(wǎng)絡(luò)與鏈接
8.電話服務(wù)
9.數(shù)據(jù)管理
10.后臺任務(wù)(Background Task)管理
11.設(shè)備管理
12.設(shè)備使用信息統(tǒng)計
13.DFX
14.國際化開發(fā)
15.折疊屏系列
16………

-
Rust
+關(guān)注
關(guān)注
1文章
240瀏覽量
7585 -
鴻蒙
+關(guān)注
關(guān)注
60文章
2963瀏覽量
45883 -
OpenHarmony
+關(guān)注
關(guān)注
33文章
3952瀏覽量
21096
發(fā)布評論請先 登錄
2025開放原子開發(fā)者大會旋武開源社區(qū)Rust分論壇成功舉辦
觸覺智能Purple Pi OH開發(fā)板率先適配OpenHarmony6.0 Release,鴻蒙明星開發(fā)板
觸覺智能RK3576開發(fā)板OpenHarmony開源鴻蒙系統(tǒng)USB控制傳輸功能示例
觸覺智能RK3506開發(fā)板通過OpenHarmony 5.1 XTS認證,引領(lǐng)鴻蒙開發(fā)新標(biāo)桿!
開鴻開發(fā)板深度體驗:從開源鴻蒙開發(fā)到AI場景實踐
開源鴻蒙開發(fā)必備!OpenHarmony替換Full SDK全攻略
觸覺智能鴻蒙開發(fā)板率先通過OpenHarmony5.0認證(生態(tài)產(chǎn)品兼容性證書)
全志科技亮相OpenHarmony開發(fā)者大會2025
貝啟BQ3568HM 開發(fā)板被選用為 OpenHarmony 明星開發(fā)板
DialogHub上線OpenHarmony開源社區(qū),高效開發(fā)鴻蒙應(yīng)用彈窗
鴻蒙北向開發(fā)OpenHarmony5.0 DevEco Studio開發(fā)工具安裝與配置
正式發(fā)布 | 啟揚RK3568開發(fā)板已成功適配OpenHarmony4.0版本
【北京迅為】iTOP-RK3568開發(fā)板鴻蒙OpenHarmony系統(tǒng)南向驅(qū)動開發(fā)實操-HDF驅(qū)動配置UART
OpenHarmony4.1系統(tǒng)WiFi藍牙打不開時,教你如何排查解決問題
OpenHarmony5.0系統(tǒng)怎么去除鎖屏直接進入界面?教你2步搞定
[鴻蒙]OpenHarmony4.0的Rust開發(fā)
評論