背景
Rust 是一門靜態(tài)強(qiáng)類型語言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開發(fā)等優(yōu)勢(shì)。Rust 官方也使用 Cargo 工具來專門為 Rust 代碼創(chuàng)建工程和構(gòu)建編譯。 OpenHarmony 為了集成 C/C++ 代碼和提升編譯速度,使用了 GN + Ninja 的編譯構(gòu)建系統(tǒng)。GN 的構(gòu)建語言簡潔易讀,Ninja 的匯編級(jí)編譯規(guī)則直接高效。 為了在 OpenHarmony 中集成 Rust 代碼,并最大程度發(fā)揮 Rust 和 OpenHarmony 中原有 C/C++ 代碼的交互性,采用 GN 作為統(tǒng)一構(gòu)建工具,即通過 GN 構(gòu)建 Rust 源碼文件(xxx.rs),并增加與 C/C++ 互操作、編譯時(shí) lint、測(cè)試、IDL 轉(zhuǎn)換、三方庫集成、IDE 等功能。同時(shí)擴(kuò)展 gn 框架,支持接口自動(dòng)化轉(zhuǎn)換,最大程度簡化開發(fā)。
基本概念
配置規(guī)則
OpenHarmony 提供了用于 Rust 代碼編譯構(gòu)建的各類型 GN 模板,可以用于編譯 Rust 可執(zhí)行文件,動(dòng)態(tài)庫和靜態(tài)庫等。各類型模板說明如下:
配置 Rust 靜態(tài)庫示例
該示例用于測(cè)試 Rust 可執(zhí)行 bin 文件和靜態(tài)庫 rlib 文件的編譯,以及可執(zhí)行文件對(duì)靜態(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í)行文件,運(yùn)行結(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.運(yùn)行測(cè)試
// 運(yùn)行 # ./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í)手冊(cè)》,希望對(duì)大家有所幫助:
《鴻蒙(Harmony OS)開發(fā)學(xué)習(xí)手冊(cè)》
入門必看: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)建第一個(gè)ArkTS應(yīng)用
3.構(gòu)建第一個(gè)JS應(yīng)用
4…
開發(fā)基礎(chǔ)知識(shí):https://docs.qq.com/doc/DUk51cHZJaUpmSlhH
1.應(yīng)用基礎(chǔ)知識(shí)
2.配置文件
3.應(yīng)用數(shù)據(jù)管理
4.應(yīng)用安全管理
5.應(yīng)用隱私保護(hù)
6.三方應(yīng)用調(diào)用管控機(jī)制
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.后臺(tái)任務(wù)(Background Task)管理
11.設(shè)備管理
12.設(shè)備使用信息統(tǒng)計(jì)
13.DFX
14.國際化開發(fā)
15.折疊屏系列
16………
-
Rust
+關(guān)注
關(guān)注
1文章
228瀏覽量
6601 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2339瀏覽量
42805 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3713瀏覽量
16254
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論