精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙應用Native SDK C++ (JNI)開發實戰

開發 后端
Native SDK是一套工具,使您能夠在 HarmonyOS 應用中使用 C 和 C++ 代碼,并提供眾多平臺庫,Native SDK 可能不適合大多數編程初學者,這些初學者只需使用 Java /JS代碼和框架 API 開發應用。

[[425238]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

什么是鴻蒙Native SDK

  • Native SDK是一套工具,使您能夠在 HarmonyOS 應用中使用 C 和 C++ 代碼,并提供眾多平臺庫,Native SDK 可能不適合大多數編程初學者,這些初學者只需使用 Java /JS代碼和框架 API 開發應用。然而,如果需要實現以下一個或多個目標,那么 Native SDK 就能派上用場:
  • 可以進一步提升設備性能,以降低延遲或運行游戲、物理模擬等計算密集型應用。
  • 重復使用您自己或其他開發者的 C 或 C++ 庫。

HarmonyOS提供了一些圖形圖像、日志、媒體等相關的Native API。

1 鴻蒙NDK開發環境準備

1.1 開發工具DevEco studio安裝

  • 確認安裝好開發工具DevEco studio,版本需要支持Native SDK的
  • 本文章的版本是 DevEco studio 2.2.0.200
  • 工具到鴻蒙官網下載,如果已經沒有2.2版本可以到hmxt.club下載

1.2 設置安裝Native SDK(NDK)

第一次安裝,正常默認安裝了NDK,如需要修改版本,點擊左下角Configure 進入設置。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

如果已經打開項目則選中DevEco studio的菜單File->Settings。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

2 第一個鴻蒙應用NDK示例

2.1 創建第一個HamonyOs Native C++項目

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

2.2 Native C++項目的文件分析

2.2.1 build.gradle 鴻蒙app項目配置

  • 路徑entry/build.gradle
  • 配置編譯的CPU對應的架構 arm64-v8a
  • 配置C++項目編譯用的cmake文件 src/main/cpp/CMakeLists.txt
  • 配置C++ 編譯參數-指定C++ 版本 -std=c++17
鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

2.2.2 CMakeList.txt (C++項目文件)

  • 路徑 entry/src/main/cpp/CMakeList.txt
  • add_library(hello SHARED hello.cpp)
  • 輸出為動態庫 指定c++源碼文件
  • target_link_libraries(hello libhilog_ndk.z.so)
  • 設定項目依賴的庫
鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

2.2.3 ndk c++源碼(jni.h)

  • 路徑 entry/src/main/cpp/hello.cpp
  • 通過函數名稱對應java調用
  • 引用jni.h與java交互
  1. #include <jni.h> 
  2. #include <string> 
  3. #include <Hilog/log.h> 
  4. extern "C" 
  5. JNIEXPORT jstring JNICALL 
  6. Java_com_example_myapplication_slice_MainAbilitySlice_stringFromJNI(JNIEnv* env, jobject  obj) { 
  7.     std::string hello = "Hello from JNI C++ codes"
  8.     int len = hello.size(); 
  9.     jchar res[len]; 
  10.     for (int i = 0; i < len; i++) { 
  11.         res[i] = (jchar)hello[i]; 
  12.     } 
  13.     return env->NewString(res, len); 

2.2.4 ndk java源碼

  • 文件名 MainAbilitySlice.java
  • System.loadLibrary(“hello”);
  • 導入c++動態庫
  • C++函數與java函數綁定

假定java函數名為 public native String stringFromJNI(); 那 java_命名空間_類名_函數 = C語言函數 ,所以c++函數名為Java_com_example_myapplication_slice_MainAbilitySlice_stringFromJNI(JNIEnv* env, jobject obj),后面的參數對應java的線程環境和調用stringFromJNI函數的對象。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

3 Native SDK (NDK)原生的C++接口分析

  • 在上一章創建項目后,本章分析下c++能夠調用哪些接口、c++程序的編譯流程、庫和編譯工具所在路徑。

3.1 官方Native API參考

官方直接提供了api的參考,目前鴻蒙自身的接口支持得還不多。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

3.2 Native API支持得標準庫

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

3.3 分析鴻蒙native SDK 工具和庫

在DevEco studio的菜單File->Project Structure進入可以看到,項目引用的ndk的路徑,并且可以設置修改ndk的版本,本文選擇了2.2.0.1版本的ndk。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

進入ndk目錄可以看到:

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

其中llvm目錄下是編譯工具鏈,包含編譯工具和C/C++ 庫,進入llvm/bin后可以看到編譯的工具是clang 和clang++。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

sysroot是系統庫和頭文件路徑。

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區
鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

通過頭文件和庫文件可以看到OpenGLES 三維渲染 OpenSLES 原始音頻 也是支持的,原生音頻opensles已測可以正常調用,OpenGLES 三維渲染沒有調用測試,但是通過鴻蒙ndk工具已經成功編譯開源的三維引擎。

NDK配置 cmake說明

JNI實現C++與java交互

4 JNI入門

4.1 什么是JNI

  • JNI 是指 Java 原生接口。它定義了Java編譯的字節碼與原生代碼(使用 C/C++ 編寫)互動的方式。JNI 不依賴于供應商,支持從動態共享庫加載代碼。

4.2 JNI開發原則

  • 盡可能減少跨 JNI 層傳遞資源的次數
  • 盡可能避免JAVA與C++異步通信
  • 盡可能減少需要接觸 JNI 或被 JNI 接觸的線程數
  • 將接口代碼保存在少量易于識別的 C++ 和 Java 源位置,以便將來進行重構

4.3 JavaVM 和 JNIEnv

JavaVM

  • Java語言的執行環境是Java虛擬機(JVM),每個JVM虛擬機都在本地環境中有一個JavaVM結構體,JavaVM是Java虛擬機在JNI層的代表,JNI全局僅僅有一個JavaVM結構中封裝了一些函數指針(或叫函數表結構),JavaVM中封裝的這些函數指針主要是對JVM操作接口。

JNIEnv

  • 每個線程對應一個JNIEnv結構
  • JNIEnv 提供了大部分 JNI 函數。原生函數第一個參數都是JNIEnv
  • 您無法在線程之間共享 JNIEnv
  • 可以使用 AttachCurrentThread() 或 AttachCurrentThreadAsDaemon() 函數附加通過 pthread_create() 或 std::thread 啟動的線程。
  • 在附加之前,線程不包含任何 JNIEnv,也無法調用 JNI
  • JNI 附加的線程在退出之前必須調用 DetachCurrentThread()

4.4 jclass、jmethodID 和 jfieldID

  • 分別對應java中的類、成員函數和成員變量。
  • 傳遞給原生方法的每個參數,以及 JNI函數返回的幾乎每個對象都屬于“局部引用”。這意味著,局部引用在當前線程中的當前原生方法運行期間有效。在原生方法返回后,即使對象本身繼續存在,該引用也無效。
  • 獲取非局部引用的唯一方法是通過 NewGlobalRef 和 NewWeakGlobalRef 函數。

JNI CMake ninja NDK c++ java的關系

鴻蒙應用Native SDK C++ (JNI)開發實戰-鴻蒙HarmonyOS技術社區

結束

更多jni接口參數可以直接查看java的手冊

更多內容可以觀看51cto學堂上的課程《鴻蒙Native SDK JNI C++開發入門和實戰-示例擴展支持lua腳本》,也可以關注我后發發的文章。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-10-13 15:51:29

C++應用開發

2009-04-12 09:25:12

Symbian諾基亞移動OS

2010-07-23 14:51:09

OPhone開發

2010-01-13 14:18:52

Windows Emb

2009-04-12 09:22:27

Symbian諾基亞移動OS

2009-04-12 09:19:27

Symbian諾基亞移動OS

2009-04-12 09:16:30

Symbian諾基亞移動OS

2009-04-12 09:20:59

Symbian諾基亞移動OS

2021-07-26 05:26:54

Androidc++java

2014-04-17 10:37:43

C++.NET Native

2013-05-02 13:06:05

C++遇到iOS應用開SQLITE

2011-12-28 10:08:24

Javajni

2010-01-28 10:33:10

C++開發程序

2014-06-04 13:19:29

C++ndk安卓開發

2021-02-01 13:58:51

鴻蒙HarmonyOS應用開發

2010-01-22 16:35:41

C++開發

2012-04-28 15:28:21

JNI混合編程Java

2010-02-06 13:52:39

C++ profile

2011-03-30 17:20:18

C++引用

2010-02-01 11:13:00

C++ Traits
點贊
收藏

51CTO技術棧公眾號

超碰国产在线| 日本中文字幕在线观看视频| 亚洲成人偷拍| 精品久久久久久久久久久久久久| 鲁鲁狠狠狠7777一区二区| 青娱乐在线免费视频| 天天做综合网| 日韩精品中文字幕在线| 一路向西2在线观看| 伊人电影在线观看| 久久视频一区二区| 成人免费福利视频| 国产高清中文字幕| 欧美一区二区三区另类| 亚洲精品一区av在线播放| 亚洲无在线观看| 蜜桃麻豆影像在线观看| 亚洲美女屁股眼交| 日韩理论片在线观看| 亚洲国产精品18久久久久久| 日本亚洲欧美天堂免费| 久久久久日韩精品久久久男男| 欧美多人猛交狂配| 中文无码日韩欧| 欧美视频中文字幕| 国产精品秘入口18禁麻豆免会员| 国产精品一区二区三区视频网站| 26uuuu精品一区二区| 91亚色免费| 最近中文字幕在线视频| 国产精品五区| 欧美黑人性猛交| 亚洲区一区二区三| 青青草成人影院| 亚洲欧美日韩在线高清直播| 人妻 丝袜美腿 中文字幕| 9999在线精品视频| 欧美偷拍一区二区| 欧美一级黄色片视频| aa国产成人| 亚洲最新视频在线观看| 欧美日韩在线免费观看视频| 国产人成在线观看| 久久综合九色综合97婷婷女人| 成人午夜影院在线观看| 国产人妖一区二区三区| 精品系列免费在线观看| 国产精品美女免费视频| 日本丰满少妇做爰爽爽| 老司机精品久久| 热re99久久精品国产66热| 国产精品自拍视频一区| 亚洲日产国产精品| 国内精品久久久久影院优| 久久午夜鲁丝片午夜精品| 欧美午夜不卡| 欧美福利视频在线| 国产一级片播放| 韩日成人av| 97国产一区二区精品久久呦 | 少妇荡乳情欲办公室456视频| 国产麻豆视频一区二区| aaa级精品久久久国产片| 亚洲国产精品久久久久爰性色 | 色噜噜狠狠色综合中国| 黄www在线观看| 亚洲成人人体| 欧美午夜精品久久久久久超碰| 性猛交ⅹ×××乱大交| 福利一区二区三区视频在线观看| 欧美日精品一区视频| www.色就是色.com| 成人av综合网| 亚洲精品美女免费| 国产主播av在线| 女同性一区二区三区人了人一 | 国产一级一片免费播放| 国产一区白浆| 国产精品啪视频| 一区二区视频免费| 国产精品一二三四区| 激情视频一区二区| 成人亚洲综合天堂| 亚洲免费高清视频在线| 九一国产精品视频| 制服诱惑亚洲| 日韩欧美亚洲国产精品字幕久久久| 国产日韩视频一区| 狠狠操综合网| 欧美国产第二页| 久久国产视频一区| 黄色小说综合网站| 国产精品一区二区三区免费观看| 男生女生差差差的视频在线观看| 国产精品精品国产色婷婷| 成人免费a级片| 台湾佬中文娱乐久久久| 日韩视频免费观看高清完整版| 添女人荫蒂视频| 日本不卡高清| 91国内在线视频| 一级做a爱片性色毛片| 成人精品一区二区三区四区| 日本在线视频一区| 丰满的护士2在线观看高清| 日本道色综合久久| 亚洲国产精品第一页| 日韩成人精品一区二区| 91国内揄拍国内精品对白| 亚洲一级黄色大片| 91一区二区三区在线观看| 亚洲第一精品区| 9i看片成人免费高清| 欧美一级二级三级乱码| 手机免费看av| 亚洲国产日韩欧美一区二区三区| 国产精品免费在线免费 | 99久久精品国产一区二区三区| 色综合久久88色综合天天提莫| 黄页网站大全在线免费观看| 欧美在线看片a免费观看| 熟妇高潮一区二区| 羞羞色午夜精品一区二区三区| 日本在线观看天堂男亚洲 | ijzzijzzij亚洲大全| 综合另类专区| 精品久久久久久久久久久院品网 | 亚洲一二三专区| 免费一区二区三区在线观看| 亚洲精品国产setv| 午夜精品久久久久久久白皮肤| 99久久国产免费| 国产精品毛片大码女人| 亚洲 中文字幕 日韩 无码| 国产乱人伦丫前精品视频| 欧美人在线观看| 国产情侣自拍小视频| 国产精品人成在线观看免费| 十八禁视频网站在线观看| 老司机aⅴ在线精品导航| 色综合久久中文字幕综合网小说| 97av免费视频| 国产精品久久久久婷婷| 波多野结衣天堂| 精品久久91| 国产精品狠色婷| 国产美女视频一区二区三区| 日韩欧美国产一区二区| 成年人网站免费看| 新狼窝色av性久久久久久| 噜噜噜噜噜久久久久久91| 一二三四视频在线中文| 亚洲精品一区二区三区婷婷月| 日韩av黄色片| 91视频国产观看| 少妇高清精品毛片在线视频| 免费视频一区三区| 国产精品九九久久久久久久| 国内精品在线视频| 欧美综合天天夜夜久久| 国产伦理片在线观看| 99亚洲伊人久久精品影院红桃| 俄罗斯精品一区二区三区| 日本黄色片在线观看| 欧美日本乱大交xxxxx| 午夜剧场免费在线观看| 国产69精品久久久久毛片| 日本精品福利视频| 91精品尤物| 欧美一级视频一区二区| 国产有码在线| 777午夜精品视频在线播放| 精品99在线观看| av男人天堂一区| 日韩精品一区二区三区不卡| 精品国产一区二区三区四区| 91色在线视频| 国产盗摄——sm在线视频| 亚洲嫩模很污视频| 在线观看一二三区| 亚洲一区二区3| 97伦伦午夜电影理伦片| 久久久成人网| 亚洲五月六月| 99精品在免费线中文字幕网站一区| 992tv在线成人免费观看| 成人网视频在线观看| 日韩午夜激情视频| 久久久久99精品成人片我成大片| 国产精品欧美经典| 97精品人妻一区二区三区蜜桃| 久久精品免费| 欧美a级黄色大片| 日韩系列在线| 成人福利在线观看| 天堂中文在线播放| 欧美成人精品在线| 黄网站在线观看| 日韩免费性生活视频播放| 人妻 日韩精品 中文字幕| 中文字幕一区二区三区在线观看 | 一级做a爱片久久毛片| 亚洲va在线va天堂| 在线观看免费黄色网址| 成人网页在线观看| 久久黄色片网站| 亚洲少妇诱惑| 992tv快乐视频| 精品免费一区二区| 国产有色视频色综合| 婷婷久久免费视频| 欧美一级免费视频| 久久国产精品黑丝| 日韩中文在线中文网三级| 视频一区二区三区国产| 91精品国产综合久久精品麻豆| 青草视频在线观看免费| 一区二区三区波多野结衣在线观看| 国产毛片久久久久久久| 成人午夜激情在线| 激情久久综合网| 日韩av一区二区在线影视| 男人日女人视频网站| 这里只有精品在线| 在线播放豆国产99亚洲| 国产一区99| 欧美精品欧美精品系列c| 都市激情久久| 999国内精品视频在线| 亚洲精品成人一区| 国产精品高精视频免费| 中文字幕21页在线看| 91精品国产91久久久久久吃药| fc2ppv国产精品久久| 这里精品视频免费| 国产主播福利在线| 亚洲欧美日韩国产中文| 天堂网在线中文| 精品99999| 开心激情综合网| 精品国产凹凸成av人网站| 国产熟女一区二区丰满| 欧美人与z0zoxxxx视频| 中文字幕av片| 欧美日韩三级视频| 亚洲一区中文字幕在线| 欧美色视频在线| 亚洲第一区av| 欧美在线看片a免费观看| 中文字幕69页| 日韩欧美成人网| www五月天com| 在线观看日韩电影| 天天干天天操天天操| 91福利社在线观看| 中文字幕乱码人妻无码久久| 在线观看日韩高清av| 一本色道久久综合亚洲| 欧美精品一级二级| 精品久久在线观看| 亚洲国产日韩精品在线| 亚洲欧洲成人在线| 亚洲性夜色噜噜噜7777| 日本欧美在线视频免费观看| 欧美精品一二区| 国产三级电影在线播放| 91干在线观看| 老司机精品视频网| 成人在线观看网址| 亚洲aa在线| 日韩精品久久久毛片一区二区| 日韩一区亚洲二区| 久久久99精品视频| 免费日韩av片| 国产3p在线播放| 国产成人综合自拍| av在线网站观看| 国产精品久久久久婷婷二区次| 欧美日韩免费一区二区| 五月天国产精品| 日韩黄色片网站| 欧美一级一区二区| 熟妇高潮一区二区三区| 国产一区二区日韩| av黄色在线| 国产91在线高潮白浆在线观看| 日韩成人免费av| 国产在线观看一区| 久久一区二区三区喷水| 日韩 欧美 视频| 日本欧美久久久久免费播放网| 亚洲AV无码久久精品国产一区| 91在线小视频| 免费在线观看a级片| 精品国产电影一区| 国产又爽又黄免费软件| 亚洲精品成人久久久| 快射视频在线观看| 91精品国产色综合久久不卡98| 亚洲国产精选| 日本高清一区| 亚洲高清激情| 亚洲免费av一区| 久久先锋资源网| 免看一级a毛片一片成人不卡| 91国偷自产一区二区三区观看 | 日韩精品免费在线| а√天堂在线官网| 国产成人一区二区三区| 1313精品午夜理伦电影| 一区不卡字幕| 久久性天堂网| 午夜不卡久久精品无码免费| 亚洲三级电影网站| 国产真人无遮挡作爱免费视频| 精品日韩av一区二区| 免费在线毛片网站| 国产成一区二区| 日韩电影不卡一区| 真实国产乱子伦对白视频| 麻豆成人在线观看| 国产精品探花一区二区在线观看| 亚洲激情男女视频| 国产又粗又猛又爽又黄91| 亚洲视频免费一区| 精品极品在线| 国产精品v欧美精品v日韩精品 | 蜜桃传媒一区二区三区| 国产精品88888| 天天鲁一鲁摸一摸爽一爽| 欧亚洲嫩模精品一区三区| 六十路在线观看| 欧美一区二区视频97| 成人h动漫精品一区二区器材| 波多野结衣激情| 久久成人免费日本黄色| 日本精品久久久久中文| 在线观看91视频| 国产日本在线观看| 国产精品福利久久久| 啪啪亚洲精品| 韩国日本美国免费毛片| 久久中文字幕电影| 日韩欧美在线观看免费| 亚洲欧美综合v| 日韩av首页| 亚洲国产午夜伦理片大全在线观看网站 | 国产婷婷一区二区| 波多野结衣不卡| 在线精品91av| 青青久久精品| 日本黄色播放器| 国产乱码精品一区二区三区忘忧草| 日韩三级在线观看视频| 日韩欧美卡一卡二| 丁香花在线电影| 久久青青草原| 日韩成人精品在线| 女同久久另类69精品国产| 9191精品国产综合久久久久久| 最新黄网在线观看| 国产精品国产三级国产专区53| 在线日韩欧美| 一级片视频免费看| 欧美男同性恋视频网站| av在线app| 国产亚洲精品自在久久| 性欧美长视频| 貂蝉被到爽流白浆在线观看 | 日韩av片永久免费网站| 国产精品亚洲人成在99www| 国产小视频精品| 亚洲人成网站在线| 黄色av免费观看| 日韩免费在线免费观看| 爽成人777777婷婷| 国产欧美视频一区| 精品日韩中文字幕| 无遮挡动作视频在线观看免费入口| 97超碰资源| 久久久成人网| 成年人午夜剧场| 亚洲精品久久久久久久久久久久久 | 波多野结衣电影免费观看| 午夜精品国产更新| av大全在线免费看| 成人欧美一区二区三区黑人免费| 最新亚洲一区| youjizz亚洲女人| 欧美v亚洲v综合ⅴ国产v| 偷拍精品精品一区二区三区| 久久av秘一区二区三区| 99久久久国产精品| 一级黄色片视频| 欧美在线视频免费播放| 久久精品国内一区二区三区水蜜桃 | 国产成人无码精品亚洲| 日韩一区二区久久久| 国产精品宾馆| 天天干天天色天天干|