国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用Rust開發(fā)鴻蒙應(yīng)用(ArkTS NAPI)

這篇具有很好參考價值的文章主要介紹了用Rust開發(fā)鴻蒙應(yīng)用(ArkTS NAPI)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開發(fā)流程

在DevEco Studio的模板工程中包含使用Native API的默認(rèn)工程,使用File->New->Create Project創(chuàng)建Native C++模板工程。

在此基礎(chǔ)上進行修改

刪除

entry/src/main/cpp

打開

entry/build-profile.json5

刪除c++ build 配置

{
  "apiType": "stageMode",
  "buildOption": {
    // "externalNativeOptions": {
    //  "path": "./src/main/rust/CMakeLists.txt",
    //  "arguments": "",
    //  "cppFlags": "",
    //  }
  },
  "targets": [
    {
      "name": "default",
      "runtimeOS": "HarmonyOS"
    },
    {
      "name": "ohosTest",
    }
  ]
}

創(chuàng)建rust項目

cargo new hello

修改 Cargo.toml

[package]
name = "hello"
version = "0.1.0"
edition = "2021"

[lib]
name = "hello"
crate-type = ["dylib"]

[dependencies]
oh-napi-sys = "0.1" 
ctor = "0.1"

lib.rs 添加測試代碼

use std::ffi::{CString};
use std::ptr::{null_mut};
use oh_napi_sys::*;
use ctor::ctor;

extern "C" fn add(env: napi_env, info: napi_callback_info) ->napi_value{
    // 期望從ArkTS側(cè)獲取的參數(shù)的數(shù)量,napi_value可理解為ArkTS value在Native方法中的表現(xiàn)形式。

    let mut args:[napi_value; 2] = [null_mut();2];
    let mut argc = args.len();
    unsafe {
        napi_get_cb_info(env, info, &mut argc, args.as_mut_ptr(), null_mut(), null_mut());

        let mut valuetype0  = napi_valuetype_napi_undefined;
        napi_typeof(env, args[0], &mut valuetype0);
        let mut valuetype1  = napi_valuetype_napi_undefined;
        napi_typeof(env, args[1], &mut valuetype1);

        if (valuetype0 != napi_valuetype_napi_number) || (valuetype1 != napi_valuetype_napi_number) {
            let mut undefined: napi_value= null_mut();
            napi_get_undefined(env, &mut undefined);
            return undefined;
        }


        // 將獲取的ArkTS參數(shù)轉(zhuǎn)換為Native信息,此處ArkTS側(cè)傳入了兩個number,這里將其轉(zhuǎn)換為Native側(cè)可以操作的double類型。
        let mut value0 = 0f64;
        napi_get_value_double(env, args[0], &mut value0);

        let mut value1 = 0f64;
        napi_get_value_double(env, args[1], &mut value1);

        // Native側(cè)的業(yè)務(wù)邏輯,這里簡單以兩數(shù)相加為例。
        let native_sum = value0 + value1;


        // 此處將Native側(cè)業(yè)務(wù)邏輯處理結(jié)果轉(zhuǎn)換為ArkTS值,并返回給ArkTS。
        let mut sum = null_mut();
        napi_create_double(env, native_sum, &mut sum);

        return sum;
    }
}
type Callback = extern "C" fn(env: napi_env, info: napi_callback_info) -> napi_value;

unsafe fn new_func_descriptor(name: &'static str, f: Callback) ->napi_property_descriptor{
    let name= CString::new(name).unwrap();
    napi_property_descriptor{
        utf8name: CString::into_raw(name),
        name: null_mut(),
        method: Some(f),
        getter: None,
        setter: None,
        value: null_mut(),
        attributes: napi_property_attributes_napi_default,
        data: null_mut(),
    }
}

// 注冊 module
#[ctor]
fn register_hello_module(){
    let name= CString::new( "hello").unwrap();

    let mut hello_module = napi_module{
        nm_version: 1,
        nm_flags: 0,
        nm_filename: null_mut(),
        nm_register_func: Some(init),
        nm_modname: name.as_ptr() as _,
        nm_priv: 0 as * mut _,
        reserved: [0 as * mut _;4],
    };


    unsafe {
        napi_module_register(&mut hello_module);
    }

    // Init將在exports上掛上Add/NativeCallArkTS這些Native方法,此處的exports就是開發(fā)者import之后獲取到的ArkTS對象。
    unsafe extern "C" fn init(env: napi_env , exports: napi_value )-> napi_value {

        let desc =[
            new_func_descriptor("add", add),
        ];

        let count = desc.len();
        napi_define_properties(env, exports, count, desc.as_ptr());
        return exports;
    }
}


添加對應(yīng)ts代碼

// entry/src/main/rust/types/libhello/index.d.ts

export const add: (a: number, b: number) => number;
// entry/src/main/rust/types/libhello/oh-package.json5

{
  "name": "libhello.so",
  "types": "./index.d.ts",
  "version": "",
  "description": "Please describe the basic information."
}

配置依賴

// entry/oh-package.json5
{
  "name": "entry",
  "version": "1.0.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
  "dependencies": {
    "libhello.so": "file:./src/main/rust/types/libhello"
  }
}

在 rust 根目錄下編譯,添加ohos目標(biāo)的教程可以參考 Rust交叉編譯OpenHarmony應(yīng)用動態(tài)庫

cargo build -Zbuild-std  --release  --target aarch64-unknown-linux-ohos

將編譯好的 libhello.so 拷貝至

entry/libs/arm64-v8a

修改頁面 Index.ets

import testNapi from 'libhello.so'

// onClick 里添加
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));

編譯app點擊hello world,日志中看到 Test NAPI 2 + 3 = 5文章來源地址http://www.zghlxwxcb.cn/news/detail-768236.html

到了這里,關(guān)于用Rust開發(fā)鴻蒙應(yīng)用(ArkTS NAPI)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 鴻蒙HarmonyOS實戰(zhàn)-ArkTS語言(基本語法)

    鴻蒙HarmonyOS實戰(zhàn)-ArkTS語言(基本語法)

    ??1.簡介 HarmonyOS的ArkTS語言是一種基于TypeScript開發(fā)的語言,它專為HarmonyOS系統(tǒng)開發(fā)而設(shè)計。ArkTS語言結(jié)合了JavaScript的靈活性和TypeScript的嚴(yán)謹(jǐn)性,使得開發(fā)者能夠快速、高效地開發(fā)出高質(zhì)量的HarmonyOS應(yīng)用程序。 ArkTS語言具有以下特點: 靜態(tài)類型檢查:開發(fā)者在編寫代碼時可以

    2024年01月18日
    瀏覽(38)
  • HarmonyOS/OpenHarmony應(yīng)用開發(fā)-ArkTS語言聲明式UI描述

    ArkTS以聲明方式組合和擴展組件來描述應(yīng)用程序的UI,同時還提供了基本的屬性、事件和子組件配置方法,幫助開發(fā)者實現(xiàn)應(yīng)用交互邏輯。 一、創(chuàng)建組件 根據(jù)組件構(gòu)造方法的不同,創(chuàng)建組件包含有參數(shù)和無參數(shù)兩種方式。 說明,創(chuàng)建組件時不需要new運算符。 1.無參數(shù) 如果組

    2024年02月08日
    瀏覽(21)
  • HarmonyOS/OpenHarmony應(yīng)用開發(fā)-Stage模型ArkTS語言FormExtensionAbility

    FormExtensionAbility模塊提供了卡片擴展相關(guān)接口。 說明 : 模塊首批接口從API version 9 開始支持。模塊接口僅可在Stage模型下使用。 導(dǎo)入模塊 : import FormExtensionAbility from \\\'@ohos.app.form.FormExtensionAbility\\\'; 屬性: 名稱 類型 可讀 可寫 說明 context FormExtensionContext 是 否 FormExtensionAbility的上下

    2024年02月01日
    瀏覽(25)
  • HarmonyOS/OpenHarmony應(yīng)用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載

    HarmonyOS/OpenHarmony應(yīng)用開發(fā)-ArkTS語言渲染控制LazyForEach數(shù)據(jù)懶加載

    LazyForEach從提供的數(shù)據(jù)源中按需迭代數(shù)據(jù),并在每次迭代過程中創(chuàng)建相應(yīng)的組件。當(dāng)LazyForEach在滾動容器中使用了,框架會根據(jù)滾動容器可視區(qū)域按需創(chuàng)建組件,當(dāng)組件劃出可視區(qū)域外時,框架會進行組件銷毀回收以降低內(nèi)存占用。 一、接口描述 二、IDataSource類型說明 三、

    2024年02月11日
    瀏覽(24)
  • HarmonyOS/OpenHarmony應(yīng)用開發(fā)-ArkTS語言渲染控制if/else條件渲染

    ArkTS提供了渲染控制的能力。條件渲染可根據(jù)應(yīng)用的不同狀態(tài),使用if、else和else if渲染對應(yīng)狀態(tài)下的UI內(nèi)容。說明:從API version 9開始,該接口支持在ArkTS卡片中使用。 一、使用規(guī)則 支持if、else和else if語句。 if、else if后跟隨的條件語句可以使用狀態(tài)變量。 允許在容器組件內(nèi)使

    2024年02月12日
    瀏覽(32)
  • HarmonyOS鴻蒙開發(fā)指南:基于ArkTS開發(fā) 音頻錄制開發(fā)指導(dǎo)

    目錄 場景介紹 開發(fā)步驟 全流程場景 正常錄制場景 音頻錄制的主要工作是捕獲音頻信號

    2024年01月19日
    瀏覽(28)
  • HarmonyOS鴻蒙開發(fā)指南:基于ArkTS開發(fā) 音頻渲染開發(fā)指導(dǎo)

    目錄 場景介紹 音頻中斷 狀態(tài)檢查 異步操作 開發(fā)步驟

    2024年01月16日
    瀏覽(25)
  • 鴻蒙HarmonyOS應(yīng)用開發(fā)之使用Node-API實現(xiàn)跨語言交互開發(fā)流程

    鴻蒙HarmonyOS應(yīng)用開發(fā)之使用Node-API實現(xiàn)跨語言交互開發(fā)流程

    使用Node-API實現(xiàn)跨語言交互,首先需要按照Node-API的機制實現(xiàn)模塊的注冊和加載等相關(guān)動作。 ArkTS/JS側(cè) :實現(xiàn)C++方法的調(diào)用。代碼比較簡單,import一個對應(yīng)的so庫后,即可調(diào)用C++方法。 Native側(cè) :.cpp文件,實現(xiàn)模塊的注冊。需要提供注冊lib庫的名稱,并在注冊回調(diào)方法中定義接

    2024年04月26日
    瀏覽(28)
  • HarmonyOS鴻蒙開發(fā)指南:基于ArkTS的聲明式開發(fā)范式 聲明式UI開發(fā)實例 繪圖與動畫

    目錄 繪制圖形 繪制基本幾何圖形 繪制自定義幾何圖形 animateTo實現(xiàn)閃屏動畫 頁面轉(zhuǎn)場動畫 繪制能力主要是通過框架提供的繪制組件來支撐,支持svg標(biāo)準(zhǔn)繪制命令。 本節(jié)主要學(xué)習(xí)如何使用繪制組件,繪制詳情頁食物成分標(biāo)簽(基本幾何圖形)和應(yīng)用Logo(自定義圖形)。

    2024年01月17日
    瀏覽(26)
  • 【鴻蒙(HarmonyOS)】UI開發(fā)的兩種范式:ArkTS、JS(以登錄界面開發(fā)為例進行對比)

    【鴻蒙(HarmonyOS)】UI開發(fā)的兩種范式:ArkTS、JS(以登錄界面開發(fā)為例進行對比)

    之后關(guān)于HarmonyOS技術(shù)的分享,將會持續(xù)使用到以下版本 HarmonyOS:3.1/4.0 SDK:API 9 Release Node.js:v14.20.1 DevEco Studio: 3.1.0 HarmonyOS應(yīng)用的UI開發(fā)依賴于 方舟開發(fā)框架(簡稱ArkUI) 。 根據(jù)官方介紹,ArkUI提供了UI語法、豐富的UI功能(組件、布局、動畫以及交互事件),以及實時界面

    2024年02月08日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包