RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

[鴻蒙]OpenHarmony4.0的Rust開發(fā)

王程 ? 2024-02-26 17:28 ? 次閱讀

背景

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ā)。

基本概念

wKgaomXbKX-AAe6rAADEW5Pyw8c913.png

配置規(guī)則

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

wKgZomXbKYmAZDfFAAKDbDTFKMc427.png

配置 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.……

wKgaomXW6N2AJp9uAAQXRxEAprs547.png

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

wKgaomXW6OSAFcCRAAV2zd2X_1s891.png

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

wKgZomXW6PuAA7wEAAKx6By_2Z8377.png

開發(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…

wKgZomXW6QaAM4niAAQzrXUUPik914.png

基于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………

wKgZomXW6RKATahiAAKz-zSMnR4040.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6601
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2339

    瀏覽量

    42805
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3713

    瀏覽量

    16254
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenHarmony屬性信息怎么修改?觸覺智能RK3566鴻蒙開發(fā)板來演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,修改產(chǎn)品屬性信息的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新OpenHarmon
    的頭像 發(fā)表于 11-27 09:31 ?144次閱讀
    <b class='flag-5'>OpenHarmony</b>屬性信息怎么修改?觸覺智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板來演示

    如何在開源鴻蒙OpenHarmony開啟SELinux模式?RK3566鴻蒙開發(fā)板演示

    本文介紹開源鴻蒙OpenHarmony系統(tǒng)下,開啟/關(guān)閉SELinux權(quán)限的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適配全新Open
    的頭像 發(fā)表于 11-18 19:03 ?308次閱讀
    如何在開源<b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b>開啟SELinux模式?RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板演示

    OpenHamrony4.0去除鎖屏是一種什么體驗(yàn)?觸覺智能給你支支招

    本文介紹開源鴻蒙OpenHarmony 4.0系統(tǒng)下,去除鎖屏開機(jī)后直接進(jìn)入界面的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,已適
    的頭像 發(fā)表于 11-13 10:37 ?240次閱讀
    OpenHamrony<b class='flag-5'>4.0</b>去除鎖屏是一種什么體驗(yàn)?觸覺智能給你支支招

    OpenHarmony4.0系統(tǒng)修改屏幕旋轉(zhuǎn)方法,RK3566鴻蒙開發(fā)板備戰(zhàn)第九屆華為ICT大賽

    本文提供OpenHarmony4.0系統(tǒng)豎屏修改為旋轉(zhuǎn)時(shí)的操作方法,本次使用了觸覺智能的Purple Pi OH鴻蒙開源主板,搭載了瑞芯微RK3566,Laval官方社區(qū)主薦的一款鴻蒙開發(fā)
    的頭像 發(fā)表于 09-25 00:29 ?476次閱讀
    <b class='flag-5'>OpenHarmony4.0</b>系統(tǒng)修改屏幕旋轉(zhuǎn)方法,RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板備戰(zhàn)第九屆華為ICT大賽

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)

    4.1學(xué)習(xí)之旅了嗎?快來加入我們,一起探索鴻蒙4.1系統(tǒng)的無限魅力吧! 【北京迅為】OpenHarmony學(xué)習(xí)開發(fā)系列教程(第1期 北向基礎(chǔ)篇一) P0_先導(dǎo)課 P1_OpenHarmony
    發(fā)表于 07-23 10:44

    深耕鴻蒙生態(tài),國科微旗艦芯片獲“鴻蒙4.0”首款認(rèn)證

    7月9日,國科微宣布旗下超高清視頻解碼及商顯芯片通過OpenHarmony4.0版本兼容性測(cè)評(píng),獲頒鴻蒙生態(tài)產(chǎn)品兼容性證書。其中,國科微GK6323V100C是業(yè)界首款通過鴻蒙4.0
    的頭像 發(fā)表于 07-10 13:10 ?459次閱讀
    深耕<b class='flag-5'>鴻蒙</b>生態(tài),國科微旗艦芯片獲“<b class='flag-5'>鴻蒙</b><b class='flag-5'>4.0</b>”首款認(rèn)證

    鴻蒙開發(fā):【OpenHarmony 4.0 Release指導(dǎo)】

    OpenHarmony 4.0版本如期而至,開發(fā)套件同步升級(jí)到API 10。相比3.2 Release版本,新增4000多個(gè)API,應(yīng)用開發(fā)能力更加豐富;HDF新增200多個(gè)HDI接口
    的頭像 發(fā)表于 05-14 09:59 ?1453次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>4.0</b> Release指導(dǎo)】

    鴻蒙OpenHarmony開發(fā)板解析:【Rust模塊配置規(guī)則和指導(dǎo)】

    Rust是一門靜態(tài)強(qiáng)類型語言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開發(fā)等優(yōu)勢(shì)。Rust官方也使用Cargo工具來專門為Rust代碼創(chuàng)建工程和構(gòu)建編譯。
    的頭像 發(fā)表于 05-10 11:32 ?1281次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發(fā)</b>板解析:【<b class='flag-5'>Rust</b>模塊配置規(guī)則和指導(dǎo)】

    【開源鴻蒙】下載OpenHarmony 4.1 Release源代碼

    本文介紹了如何下載開源鴻蒙OpenHarmony)操作系統(tǒng) 4.1 Release版本的源代碼,該方法同樣可以用于下載OpenHarmony最新開發(fā)版本(master分支)或者
    的頭像 發(fā)表于 04-27 23:16 ?902次閱讀
    【開源<b class='flag-5'>鴻蒙</b>】下載<b class='flag-5'>OpenHarmony</b> 4.1 Release源代碼

    鴻蒙網(wǎng)絡(luò)開發(fā)學(xué)習(xí):【ylong_http】

    ylong_http 構(gòu)建了完整的 HTTP 能力,支持用戶使用 HTTP 能力完成通信場(chǎng)景的需求。 ylong_http 使用 Rust 編寫,為 OpenHarmonyRust 能力構(gòu)筑提供支持。
    的頭像 發(fā)表于 03-25 16:36 ?721次閱讀
    <b class='flag-5'>鴻蒙</b>網(wǎng)絡(luò)<b class='flag-5'>開發(fā)</b>學(xué)習(xí):【ylong_http】

    鴻蒙實(shí)戰(zhàn)開發(fā)學(xué)習(xí)【FaultLoggerd組件】

    Faultloggerd部件是OpenHarmony中C/C++運(yùn)行時(shí)崩潰臨時(shí)日志的生成及管理模塊。面向基于 Rust 開發(fā)的部件,F(xiàn)aultloggerd 提供了Rust Panic
    的頭像 發(fā)表于 03-17 20:39 ?505次閱讀
    <b class='flag-5'>鴻蒙</b>實(shí)戰(zhàn)<b class='flag-5'>開發(fā)</b>學(xué)習(xí)【FaultLoggerd組件】

    鴻蒙實(shí)戰(zhàn)開發(fā):【FaultLoggerd組件】講解

    Faultloggerd部件是OpenHarmony中C/C++運(yùn)行時(shí)崩潰臨時(shí)日志的生成及管理模塊。面向基于 Rust 開發(fā)的部件,F(xiàn)aultloggerd 提供了Rust Panic
    的頭像 發(fā)表于 03-12 16:22 ?1029次閱讀
    <b class='flag-5'>鴻蒙</b>實(shí)戰(zhàn)<b class='flag-5'>開發(fā)</b>:【FaultLoggerd組件】講解

    鴻蒙OpenHarmony 4.0藍(lán)牙代碼結(jié)構(gòu)簡析

    OpenHarmony 4.0藍(lán)牙代碼結(jié)構(gòu)簡析前言 OpenHarmony 4.0上藍(lán)牙倉和目錄結(jié)構(gòu)進(jìn)行一次較大整改,本文基于4.0以上版本
    的頭像 發(fā)表于 02-26 16:08 ?1533次閱讀
    【<b class='flag-5'>鴻蒙</b>】<b class='flag-5'>OpenHarmony</b> <b class='flag-5'>4.0</b>藍(lán)牙代碼結(jié)構(gòu)簡析

    鴻蒙OS之Rust開發(fā)

    Rust是一門靜態(tài)強(qiáng)類型語言,具有更安全的內(nèi)存管理、更好的運(yùn)行性能、原生支持多線程開發(fā)等優(yōu)勢(shì)。
    的頭像 發(fā)表于 01-29 17:19 ?937次閱讀

    鴻蒙開發(fā)OpenHarmony組件復(fù)用案例

    ) } }, item => item) } } } 本文主要是對(duì)鴻蒙開發(fā)基礎(chǔ)當(dāng)中的OpenHarmony技術(shù)組件復(fù)用示例, 更多鴻蒙開發(fā)
    發(fā)表于 01-15 17:37
    RM新时代网站-首页