色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

鴻蒙next開發(fā)-OpenHarmony的NDK開發(fā)

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-01-20 11:35 ? 次閱讀

Native API(NDK)入門

Native API是OpenHarmony SDK上提供的一組native開發(fā)接口與工具集合(也稱為NDK),方便開發(fā)者使用C或者C++語言實(shí)現(xiàn)應(yīng)用的關(guān)鍵功能。Native API只覆蓋了OHOS基礎(chǔ)的一些底層能力,如libc,圖形庫,窗口系統(tǒng),多媒體,壓縮庫等,并沒有完全提供類似于JS API上的完整的OHOS 平臺能力。在應(yīng)用中使用Native API會編譯成動態(tài)庫打包到應(yīng)用中。

名詞概念

名詞名詞解釋
Native APIOHOS SDK里面native包提供的,面向三方應(yīng)用開發(fā)的Native 接口以及相應(yīng)編譯腳本,編譯工具鏈。包括C運(yùn)行時基礎(chǔ)庫libc,3D圖形庫opengl,面向JS與C跨語言的接口Node-API等,具體內(nèi)容詳見下表。
NDKNative Develop Kit的縮寫,在OHOS上就是Native API;Native API是官方名字,NDK指代相同意思。
SDK CAPIOHOS Native API中的C語言接口,以及工具鏈部分,當(dāng)前OHOS的Native API里面只包含C語言接口,因此Native API與CAPI意思一樣,建議交流的時候使用CAPI,防止Native API與napi縮寫混用。
Node-API曾用名napi,是OHOS中提供JS與C跨語言調(diào)用的接口,是Native API接口中的一部分. 該接口在Node.js提供的Node-API基礎(chǔ)上擴(kuò)展而來,但不完全與Node.js中的Node-API完全兼容。
napiNode-API的曾用名,當(dāng)前Node-API頭文件中的接口仍然以napi_開頭,不建議使用。

Native API構(gòu)成介紹

Native API目錄結(jié)構(gòu)

Native API在SDK包的位置為$(SDK_ROOT)/native目錄,主要有以下幾個部分組成

目錄功能說明
build應(yīng)用中編譯動態(tài)庫的toolchain cmake腳本;這個目錄下ohos.toolchain.cmake文件定義了給OHOS交叉編譯選項
build-tools放置編譯構(gòu)建的工具,如cmake
docsNative API接口參考文檔,通過doxgen從頭文件中提取出來
llvm支持OHOS ABI的llvm交叉編譯器
sysroot放置編譯鏈接的依賴文件目錄,包含頭文件,動態(tài)庫等

Native API接口(4.0 Release)

接口分類接口功能引入版本
標(biāo)準(zhǔn)C庫以musl為基礎(chǔ)提供的標(biāo)準(zhǔn)c庫接口,當(dāng)前提供了1500+的接口8
標(biāo)準(zhǔn)C++庫c運(yùn)行時庫libc_shared,此庫在打包的時候需要打包或者靜態(tài)鏈接到應(yīng)用中8
日志打印日志到系統(tǒng)的hilog接口8
Node-APIArkUI提供的,方便應(yīng)用開發(fā)接入JS應(yīng)用環(huán)境的一組類Node-API(也叫napi),是屬于Native API的一部分8
XComponentArkUI XComponent組件中的surface與觸屏事件接口,方便開發(fā)者開發(fā)高性能圖形應(yīng)用8
libuvArkUI集成的三方的異步IO庫8
libzzlib庫,提供基本的壓縮,解壓接口8
Drawing系統(tǒng)提供的2D圖形庫,可以在surface進(jìn)行繪制8
OpenGL系統(tǒng)提供的openglv3接口8
Rawfile應(yīng)用資源訪問接口,可以讀取應(yīng)用中打包的各種資源8
OpenSLES用于2D,3D音頻加速的接口庫8
MindsporeAI模型接口庫9
包管理包服務(wù)接口,方便查詢應(yīng)用包信息8

Native API相關(guān)資料

  • Native API參考,介紹各個API參考手冊
  • Native API中支持的標(biāo)準(zhǔn)庫,介紹Native API支持的開源標(biāo)準(zhǔn)庫
  • Native API開發(fā)指南,結(jié)合具體的例子,場景介紹各類接口的使用
  • 如何在Cmake工程中使用NDK,介紹如何使用使用NDK開發(fā)一個CMake工程
  • Node-API在應(yīng)用工程中的使用指導(dǎo), 如何使用Node-API接口

簡單應(yīng)用

如何開發(fā)應(yīng)用?

  • DevEco IDE創(chuàng)建工程選擇“Native C++”模板:

image.png

image.png

編譯運(yùn)行后,點(diǎn)擊helloworld打印輸出有:Test NAPI 2 + 3 = 5

  • ArkUI部分:
import hilog from '@ohos.hilog';           //導(dǎo)入hilog
import testNapi from 'libentry.so';        //導(dǎo)入nativeC++模塊

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() = > {
            //調(diào)用nativeC++代碼
            hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3));
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
  • nativeC部分由 CMake 和 C代碼兩部分組成:
  • CMake:
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(MyNDKApplication)
# 編譯路徑
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
# 編譯頭文件路徑
include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)
# 編譯對象entry是對應(yīng)用層可見的so,即import testNapi from 'libentry.so'
add_library(entry SHARED hello.cpp)
# 這是link命令,libace_napi 這個就是node-api需要用的so庫;
target_link_libraries(entry PUBLIC libace_napi.z.so)
  • C++:
#include "napi/native_api.h"
// 對外node-api方法,對應(yīng)testNapi.add(2, 3)
static napi_value Add(napi_env env, napi_callback_info info)
{
    size_t requireArgc = 2;
    size_t argc = 2;
    napi_value args[2] = {nullptr};

    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);

    napi_valuetype valuetype0;
    napi_typeof(env, args[0], &valuetype0);

    napi_valuetype valuetype1;
    napi_typeof(env, args[1], &valuetype1);

    double value0;
    napi_get_value_double(env, args[0], &value0);

    double value1;
    napi_get_value_double(env, args[1], &value1);

    napi_value sum;
    napi_create_double(env, value0 + value1, &sum);

    return sum;

}
// 模塊初始化方法,對應(yīng)的方法在這加入對外描述隊列
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END
// 模塊聲明,import時候調(diào)用
static napi_module demoModule = {
    .nm_version = 1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "entry",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};
// 模塊入口注冊
extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
    napi_module_register(&demoModule);
}

如何使用系統(tǒng)NDK?

上面例子運(yùn)行起來后,c++部分是沒有打印信息的,若想看到對應(yīng)的打印信息,則需要調(diào)用hilog進(jìn)行輸出,修改如下:

  • cmake修改:
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(MyNDKApplication)

set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)
# 增加hiloglib庫引用
find_library(
    # Sets the name of the path variable.
    hilog-lib
    # Specifies the name of the NDK library that
    # you want CMake to locate.
    hilog_ndk.z
)

add_library(entry SHARED hello.cpp)
# 增加hiloglib庫連接
target_link_libraries(entry PUBLIC ${hilog-lib} libace_napi.z.so)
  • c++文件修改:
// 增加hilog頭文件
#include < hilog/log.h >
#include "napi/native_api.h"

static napi_value Add(napi_env env, napi_callback_info info)
{
    // 增加打印輸出
    const unsigned int LOG_PRINT_DOMAIN = 0xFF00;
    OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "Init", "Init begins");
    size_t requireArgc = 2;
    size_t argc = 2;
    napi_value args[2] = {nullptr};
    
...
  • 輸出:
08-07 05:40:25.079  15167-15167  A0ff00/Init                    com.example.myndkapplication    I  Init begins
08-07 05:40:25.079  15167-15167  A00000/testTag                 com.example.myndkapplication    I  Test NAPI 2 + 3 = 5

具體原理是什么?

1、PC端OHOS SDK里包括了native對應(yīng)的庫文件和頭文件;

image.png

2、OHOS源碼可以編譯出帶NDK的FullSDK,也可以從CI網(wǎng)址下載

# Generate NDK library from NDK description file.
#
# Variables:
#  ndk_description_file:
#  min_compact_version: string specifies the minimal compactible version of NDK.
#    set to major_version in default.
#
template("ohos_ndk_library") {
  forward_variables_from(invoker, [ "testonly" ])
  assert(defined(invoker.ndk_description_file),
         "ndk description file is necessary ")
...
// 在GN里用ohos_ndk_library生成ndk庫和頭文件,如
    
ohos_ndk_library("libhilog_ndk") {
  output_name = "hilog_ndk"
  ndk_description_file = "./libhilog.ndk.json"
  min_compact_version = "1"
  system_capability = "SystemCapability.HiviewDFX.HiLog"
}

ohos_ndk_headers("hilog_header") {
  dest_dir = "$ndk_headers_out_dir/hilog"
  sources = [ "./include/hilog/log.h" ]
} 

// ndk_description_file 對應(yīng)的 libhilog.ndk.json 文件里聲明了導(dǎo)出的接口函數(shù)
[
    {
        "name": "OH_LOG_Print"
    },
    {
        "name": "OH_LOG_IsLoggable"
    }
]

// ohos 編譯fullsdk的命令: ./build.sh --product-name ohos-sdk

使用建議

建議使用Native API的場景

主要有如下一些

  1. 應(yīng)用性能敏感代碼,比如游戲,物理模擬等計算密集型場景
  2. 需要復(fù)用已有的C或C++庫
  3. 需要針對CPU特性進(jìn)行專項定制的庫,如neon加速

不建議使用Native API的場景

  1. 寫一個純native的的OHOS應(yīng)用
  2. 希望在盡可能多的OHOS設(shè)備上保持兼容的應(yīng)用

維測能力

  1. OHOS官方提供lldb remote方式代碼調(diào)試,詳細(xì)參看[lldb參考手冊]。
  2. musl庫的log維測能力,請參看 libc庫維測章節(jié)。

總結(jié)

  • NDK方式是應(yīng)用層直接調(diào)用底層庫或者三方庫目前看最常規(guī)的方式;
  • 4.0(API10)有ndk 46個,3.2(API9)有ndk 28個,實(shí)質(zhì)代碼里有更多的ndk,RK的原因沒有編出更多,比如sensor部分就沒有編譯出來;

審核編輯:湯梓紅

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

    關(guān)注

    33

    文章

    8691

    瀏覽量

    151683
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1045

    瀏覽量

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

    關(guān)注

    57

    文章

    2392

    瀏覽量

    42972
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1982

    瀏覽量

    30417
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3744

    瀏覽量

    16487
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    鴻蒙實(shí)戰(zhàn)項目開發(fā):【短信服務(wù)】

    兩位前阿里高級研發(fā)工程師聯(lián)合打造的 《鴻蒙NEXT星河版OpenHarmony開發(fā)文檔》 里面內(nèi)容包含了(ArkTS、ArkUI開發(fā)組件、S
    發(fā)表于 03-03 21:29

    鴻蒙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

    【書籍評測活動NO.56】極速探索HarmonyOS NEXT:純血鴻蒙應(yīng)用開發(fā)實(shí)踐

    涵蓋了鴻蒙開發(fā)的各個關(guān)鍵領(lǐng)域。另外,書中還提供了基于HarmonyOS NEXT 的完整實(shí)戰(zhàn)項目和3個特色案例,并附帶了全套的源代碼。 本書適合鴻蒙應(yīng)用
    發(fā)表于 01-20 16:53

    淘寶與華為合作將基于HarmonyOS NEXT啟動鴻蒙原生應(yīng)用開發(fā)

    1月25日,淘寶與華為舉辦鴻蒙合作簽約儀式,宣布將基于HarmonyOS NEXT啟動鴻蒙原生應(yīng)用開發(fā)
    的頭像 發(fā)表于 01-26 16:14 ?1176次閱讀

    華為宣布HarmonyOS NEXT鴻蒙星河版開發(fā)者預(yù)覽面向開發(fā)者開放申請

    華為宣布HarmonyOS NEXT鴻蒙星河版開發(fā)者預(yù)覽面向開發(fā)者開放申請,這意味著鴻蒙生態(tài)進(jìn)入第二階段,將加速千行百業(yè)的應(yīng)用
    的頭像 發(fā)表于 01-29 16:42 ?1464次閱讀
    華為宣布HarmonyOS <b class='flag-5'>NEXT</b><b class='flag-5'>鴻蒙</b>星河版<b class='flag-5'>開發(fā)</b>者預(yù)覽面向<b class='flag-5'>開發(fā)</b>者開放申請

    鴻蒙開發(fā)教程

    去年8 月份華為發(fā)布會上,華為發(fā)布了HarmonyOS NEXT預(yù)覽版,宣布不再兼容安卓應(yīng)用。大家期待的純血鴻蒙終于要來臨了,next 預(yù)覽版本現(xiàn)在已經(jīng)開放申請渠道了,Next
    的頭像 發(fā)表于 01-31 17:11 ?839次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>教程

    《詳解:鴻蒙NEXT開發(fā)核心技術(shù)》

    我們現(xiàn)在都知道鴻蒙作為一個國產(chǎn)的全棧自研系統(tǒng),經(jīng)過國家主推后。已經(jīng)引起人們很大的關(guān)注,其中作為開發(fā)者來說;許多一線大廠已經(jīng)與其華為鴻蒙展開原生應(yīng)用的合作了,目前了解到已經(jīng)有200+家。而之后出現(xiàn)了很多的高薪
    的頭像 發(fā)表于 03-13 23:00 ?1877次閱讀
    《詳解:<b class='flag-5'>鴻蒙</b><b class='flag-5'>NEXT</b><b class='flag-5'>開發(fā)</b>核心技術(shù)》

    鴻蒙NEXT南向開發(fā)案例:【智能臺燈】

    鴻蒙南向開發(fā)之智能臺燈案例
    的頭像 發(fā)表于 04-03 18:00 ?1073次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>NEXT</b>南向<b class='flag-5'>開發(fā)</b>案例:【智能臺燈】

    鴻蒙開發(fā)實(shí)例:【配置OpenHarmony SDK】

    在設(shè)置OpenHarmony應(yīng)用開發(fā)環(huán)境時,需要開發(fā)者在DevEco Studio中配置對應(yīng)的SDK信息。
    的頭像 發(fā)表于 04-22 15:24 ?2111次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>實(shí)例:【配置<b class='flag-5'>OpenHarmony</b> SDK】

    全新原生鴻蒙HarmonyOS NEXT發(fā)布,書寫國產(chǎn)操作系統(tǒng)新篇章!同時,觸覺智能發(fā)布OpenHarmony5.0固件

    10月22日,華為舉行“原生鴻蒙之夜暨華為全場景新品發(fā)布會”,正式為用戶帶來基于OpenHarmony打造的全新原生鴻蒙操作系統(tǒng)HarmonyOS NEXT和華為多個全場景智能設(shè)備新品
    的頭像 發(fā)表于 10-28 13:46 ?826次閱讀
    全新原生<b class='flag-5'>鴻蒙</b>HarmonyOS <b class='flag-5'>NEXT</b>發(fā)布,書寫國產(chǎn)操作系統(tǒng)新篇章!同時,觸覺智能發(fā)布<b class='flag-5'>OpenHarmony</b>5.0固件

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

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

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

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

    OpenHarmony怎么修改DPI密度值?觸覺智能RK3566鴻蒙開發(fā)板演示

    開源鴻蒙OpenHarmony系統(tǒng)下,修改DPI密度值的方法,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示,搭載了瑞芯微RK3566四核處理器,Laval
    的頭像 發(fā)表于 12-24 11:46 ?244次閱讀
    <b class='flag-5'>OpenHarmony</b>怎么修改DPI密度值?觸覺智能RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板演示

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發(fā)板演示

    本文介紹瑞芯微主板/開發(fā)板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示。搭載了瑞芯微RK3566四核處理器,樹莓派卡片電腦設(shè)計,支持開
    的頭像 發(fā)表于 12-30 10:08 ?147次閱讀
    <b class='flag-5'>OpenHarmony</b>源碼編譯后燒錄鏡像教程,RK3566<b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>板演示
    主站蜘蛛池模板: 思思99精品国产自在现线 | 国产精品久久久久久52AVAV | 国产高清视频在线观看不卡v | 日本无码毛片久久久九色综合 | 伊人无码高清 | 被滋润的艳妇疯狂呻吟白洁老七 | 成年视频国产免费观看 | 嫩草伊人久久精品少妇AV网站 | 男宿舍里的呻吟h | 香蕉eeww99国产精选播放 | 巨胸美乳中文在线观看 | 久久亚洲一级α片 | 青草影院天堂男人久久 | 成熟YIN荡美妞A片视频麻豆 | 亚洲乱码国产一区三区 | 激情床戏揉胸吃胸视频 | 交video| 午夜福利小视频400 午夜福利网国产A | 免费看a毛片 | 色综合欧美色综合七久久 | 午夜想想爱| 超碰免费视频公开观看 | 国产AV亚洲精品久久久久软件 | 亚洲专区中文字幕视频专区 | 久久天天躁狠狠躁夜夜呲 | 青青草国产偷拍在线av | 纯肉高H啪短文合集 | 免费精品国产人妻国语麻豆 | 免费在线观看一区 | 免费精品国产人妻国语麻豆 | 久久re6热在线视频精品 | 2021国产精品视频 | 内射无码AV-区二区在线观看 | 国产高清视频在线播放www色 | 国产精品熟女人妻 | 国产第一页在线视频 | 男人插女人动态图 | 天天操人人射 | 国产黄A片在线观看永久免费麻豆 | 麻豆国产原创中文AV网站 | 久久精品热在线观看85 |