背景
Rust 是一門靜態強類型語言,具有更安全的內存管理、更好的運行性能、原生支持多線程開發等優勢。Rust 官方也使用 Cargo 工具來專門為 Rust 代碼創建工程和構建編譯。 OpenHarmony 為了集成 C/C++ 代碼和提升編譯速度,使用了 GN + Ninja 的編譯構建系統。GN 的構建語言簡潔易讀,Ninja 的匯編級編譯規則直接高效。 為了在 OpenHarmony 中集成 Rust 代碼,并最大程度發揮 Rust 和 OpenHarmony 中原有 C/C++ 代碼的交互性,采用 GN 作為統一構建工具,即通過 GN 構建 Rust 源碼文件(xxx.rs),并增加與 C/C++ 互操作、編譯時 lint、測試、IDL 轉換、三方庫集成、IDE 等功能。同時擴展 gn 框架,支持接口自動化轉換,最大程度簡化開發。
基本概念
配置規則
OpenHarmony 提供了用于 Rust 代碼編譯構建的各類型 GN 模板,可以用于編譯 Rust 可執行文件,動態庫和靜態庫等。各類型模板說明如下:
配置 Rust 靜態庫示例
該示例用于測試 Rust 可執行 bin 文件和靜態庫 rlib 文件的編譯,以及可執行文件對靜態庫的依賴,使用模板 ohos_rust_executable 和 ohos_rust_static_library。操作步驟如下:
1.創建 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.創建 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.執行編譯得到的可執行文件,運行結果如下:
./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 應用系統庫示例
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.增加調用
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); //! 增加調用 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.
為了能讓大家更好的學習鴻蒙 (OpenHarmony) 開發技術,這邊特意整理了《鴻蒙 (OpenHarmony)開發學習手冊》,希望對大家有所幫助:
《鴻蒙(Harmony OS)開發學習手冊》
入門必看:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用開發導讀(ArKTS)
2.……
HarmonyOS概念:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.系統定義
2.技術框架
3.技術特性
4.系統安全
快速入門:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.基本概念
2.構建第一個ArkTS應用
3.構建第一個JS應用
4…
開發基礎知識:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應用基礎知識
2.配置文件
3.應用數據管理
4.應用安全管理
5.應用隱私保護
6.三方應用調用管控機制
7.資源分類與訪問
8.學習ArkTS
9…
基于ArkTS 開發:https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.Ability開發
2.UI開發
3.公共事件與通知
4.窗口管理
5.媒體
6.安全
7.網絡與鏈接
8.電話服務
9.數據管理
10.后臺任務(Background Task)管理
11.設備管理
12.設備使用信息統計
13.DFX
14.國際化開發
15.折疊屏系列
16………
-
Rust
+關注
關注
1文章
230瀏覽量
6665 -
鴻蒙
+關注
關注
57文章
2392瀏覽量
43055 -
OpenHarmony
+關注
關注
25文章
3747瀏覽量
16584
發布評論請先 登錄
相關推薦
OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發板演示
![<b class='flag-5'>OpenHarmony</b>源碼編譯后燒錄鏡像教程,RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板演示](https://file1.elecfans.com/web3/M00/04/41/wKgZO2dyAH2AFFx6AAB2FN45Lh8124.png)
OpenHarmony怎么修改DPI密度值?觸覺智能RK3566鴻蒙開發板演示
![<b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?觸覺智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板演示](https://file1.elecfans.com/web3/M00/03/8B/wKgZPGdqLoyAKZgAAAB1wHV_XdE820.png)
OpenHarmony屬性信息怎么修改?觸覺智能RK3566鴻蒙開發板來演示
![<b class='flag-5'>OpenHarmony</b>屬性信息怎么修改?觸覺智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板來演示](https://file1.elecfans.com/web3/M00/00/12/wKgZPGdGdlaAQcG2AAB7LqkFe94757.png)
如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發板演示
![如何在開源<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>開啟SELinux模式?RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板演示](https://file1.elecfans.com/web2/M00/0C/C1/wKgaomc7Hr6AL1UtAAB6Pp_Ckc0170.png)
OpenHamrony4.0去除鎖屏是一種什么體驗?觸覺智能給你支支招
![OpenHamrony<b class='flag-5'>4.0</b>去除鎖屏是一種什么體驗?觸覺智能給你支支招](https://file1.elecfans.com/web2/M00/0C/5E/wKgaomc0EPGAPz9zAACK8oQxgoE418.png)
觸覺智能Purple Pi OH鴻蒙開發板成功適配OpenHarmony5.0 Release,開啟新征程
![觸覺智能Purple Pi OH<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板成功適配<b class='flag-5'>OpenHarmony</b>5.0 Release,開啟新征程](https://file1.elecfans.com/web2/M00/0B/17/wKgaomcbB5CAT81-AABxUeJzZxU480.png)
OpenHarmony4.0系統修改屏幕旋轉方法,RK3566鴻蒙開發板備戰第九屆華為ICT大賽
![<b class='flag-5'>OpenHarmony4.0</b>系統修改屏幕旋轉方法,RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>板備戰第九屆華為ICT大賽](https://file1.elecfans.com/web2/M00/08/B7/wKgaomby6K-ATfzrAAB5H_DwKoQ192.png)
鴻蒙OpenHarmony南向/北向快速開發教程-迅為RK3568開發板
深耕鴻蒙生態,國科微旗艦芯片獲“鴻蒙4.0”首款認證
![深耕<b class='flag-5'>鴻蒙</b>生態,國科微旗艦芯片獲“<b class='flag-5'>鴻蒙</b><b class='flag-5'>4.0</b>”首款認證](https://file1.elecfans.com//web2/M00/FA/AD/wKgZomaOF-KAHWSgAAcCGg4LcQg410.png)
鴻蒙開發:【OpenHarmony 4.0 Release指導】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>:【<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>4.0</b> Release指導】](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
鴻蒙OpenHarmony開發板解析:【Rust模塊配置規則和指導】
![<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發</b>板解析:【<b class='flag-5'>Rust</b>模塊配置規則和指導】](https://file1.elecfans.com/web2/M00/E4/89/wKgaomY814aAXIR1AAA01VxEKNI913.jpg)
【開源鴻蒙】下載OpenHarmony 4.1 Release源代碼
![【開源<b class='flag-5'>鴻蒙</b>】下載<b class='flag-5'>OpenHarmony</b> 4.1 Release源代碼](https://file1.elecfans.com/web2/M00/DD/7F/wKgZomYtFoSAdY7EAACN2PSEOtQ539.png)
鴻蒙實戰開發學習【FaultLoggerd組件】
![<b class='flag-5'>鴻蒙</b>實戰<b class='flag-5'>開發</b>學習【FaultLoggerd組件】](https://file1.elecfans.com/web2/M00/C4/EC/wKgaomXwC62AFcUeAADr4EKy7Mk552.jpg)
鴻蒙實戰開發:【FaultLoggerd組件】講解
![<b class='flag-5'>鴻蒙</b>實戰<b class='flag-5'>開發</b>:【FaultLoggerd組件】講解](https://file1.elecfans.com/web2/M00/C4/EC/wKgaomXwC62AFcUeAADr4EKy7Mk552.jpg)
評論