国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)

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

[[425238]]

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

什么是鴻蒙Native SDK

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

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

1 鴻蒙NDK開發(fā)環(huán)境準(zhǔn)備

1.1 開發(fā)工具DevEco studio安裝

  • 確認(rèn)安裝好開發(fā)工具DevEco studio,版本需要支持Native SDK的
  • 本文章的版本是 DevEco studio 2.2.0.200
  • 工具到鴻蒙官網(wǎng)下載,如果已經(jīng)沒有2.2版本可以到hmxt.club下載

1.2 設(shè)置安裝Native SDK(NDK)

第一次安裝,正常默認(rèn)安裝了NDK,如需要修改版本,點(diǎn)擊左下角Configure 進(jìn)入設(shè)置。

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

如果已經(jīng)打開項(xiàng)目則選中DevEco studio的菜單File->Settings。

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

2 第一個鴻蒙應(yīng)用NDK示例

2.1 創(chuàng)建第一個HamonyOs Native C++項(xiàng)目

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

2.2 Native C++項(xiàng)目的文件分析

2.2.1 build.gradle 鴻蒙app項(xiàng)目配置

  • 路徑entry/build.gradle
  • 配置編譯的CPU對應(yīng)的架構(gòu) arm64-v8a
  • 配置C++項(xiàng)目編譯用的cmake文件 src/main/cpp/CMakeLists.txt
  • 配置C++ 編譯參數(shù)-指定C++ 版本 -std=c++17
鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

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

  • 路徑 entry/src/main/cpp/CMakeList.txt
  • add_library(hello SHARED hello.cpp)
  • 輸出為動態(tài)庫 指定c++源碼文件
  • target_link_libraries(hello libhilog_ndk.z.so)
  • 設(shè)定項(xiàng)目依賴的庫
鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

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

  • 路徑 entry/src/main/cpp/hello.cpp
  • 通過函數(shù)名稱對應(yīng)java調(diào)用
  • 引用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”);
  • 導(dǎo)入c++動態(tài)庫
  • C++函數(shù)與java函數(shù)綁定

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

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

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

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

3.1 官方Native API參考

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

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

3.2 Native API支持得標(biāo)準(zhǔn)庫

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

3.3 分析鴻蒙native SDK 工具和庫

在DevEco studio的菜單File->Project Structure進(jìn)入可以看到,項(xiàng)目引用的ndk的路徑,并且可以設(shè)置修改ndk的版本,本文選擇了2.2.0.1版本的ndk。

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

進(jìn)入ndk目錄可以看到:

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

其中l(wèi)lvm目錄下是編譯工具鏈,包含編譯工具和C/C++ 庫,進(jìn)入llvm/bin后可以看到編譯的工具是clang 和clang++。

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

sysroot是系統(tǒng)庫和頭文件路徑。

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)
鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

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

NDK配置 cmake說明

JNI實(shí)現(xiàn)C++與java交互

4 JNI入門

4.1 什么是JNI

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

4.2 JNI開發(fā)原則

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

4.3 JavaVM 和 JNIEnv

JavaVM

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

JNIEnv

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

4.4 jclass、jmethodID 和 jfieldID

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

JNI CMake ninja NDK c++ java的關(guān)系

鴻蒙應(yīng)用Native SDK C++ (JNI)開發(fā)實(shí)戰(zhàn)-鴻蒙HarmonyOS技術(shù)社區(qū)

結(jié)束

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

更多內(nèi)容可以觀看51cto學(xué)堂上的課程《鴻蒙Native SDK JNI C++開發(fā)入門和實(shí)戰(zhàn)-示例擴(kuò)展支持lua腳本》,也可以關(guān)注我后發(fā)發(fā)的文章。

想了解更多內(nèi)容,請?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2022-10-13 15:51:29

C++應(yīng)用開發(fā)

2009-04-12 09:25:12

Symbian諾基亞移動OS

2010-07-23 14:51:09

OPhone開發(fā)

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應(yīng)用開SQLITE

2011-12-28 10:08:24

Javajni

2010-01-28 10:33:10

C++開發(fā)程序

2021-02-01 13:58:51

鴻蒙HarmonyOS應(yīng)用開發(fā)

2014-06-04 13:19:29

C++ndk安卓開發(fā)

2020-11-09 11:56:49

HarmonyOS

2010-01-22 16:35:41

C++開發(fā)

2012-04-28 15:28:21

JNI混合編程Java

2010-02-06 17:39:52

C++ strtok
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

成人一级视频在线观看| 国产一区二区三区小说| 美女精品久久久| 57pao国产成人免费| 日韩理论片在线观看| 久久国产亚洲精品无码| 羞羞的视频免费| 久久r热视频| 麻豆91精品视频| 欧美日韩一级黄| 黄色国产一级视频| 精品999成人| 91黑丝在线观看| 三级在线看中文字幕完整版| 一区二区三区在线视频免费观看| 国产视频一区二| 日韩欧美中文字幕在线播放| 国产精品宾馆在线精品酒店| 国语自产精品视频在线看8查询8| 久久久久久国产免费| 热色播在线视频| 日韩一区二区三| 99re6在线视频| 粉嫩av亚洲一区二区图片| 成人黄色免费在线观看| 香蕉久久精品| 97激碰免费视频| 99精品国产一区二区三区2021| 欧美videos大乳护士334| 日本fc2在线观看| 国产一区二区在线观看视频| 欧美成人中文字幕| 妞干网免费在线视频| 国产无人区一区二区三区| 日韩欧美在线电影| 激情综合网av| 久久久久久国产精品免费免费| 影音先锋中文字幕一区| 亚洲xxxx在线| 国产高清久久| 欧美性一区二区| www.97| 亚洲国产裸拍裸体视频在线观看乱了 | 精品久久久久久久久久久久久久久久久 | 四虎影视国产精品| 久久夜色精品国产亚洲aⅴ| 国产精品成人3p一区二区三区| 久久久精品视频在线观看| 国产亚洲成av人片在线观黄桃| 亚洲第一在线视频| av日韩久久| 国产精品免费在线播放| 国内精品伊人久久久久av一坑 | 国产在线不卡| 日韩精品一区二区在线视频| 日本一区二区久久| 在线三级av| 色丁香久综合在线久综合在线观看| 麻豆影视国产在线观看| 久久精品国产亚洲7777| 激情都市亚洲| 伊人伊成久久人综合网站| 99免在线观看免费视频高清| 亚洲第一区中文99精品| 希岛爱理av免费一区二区| 欧美高清视频一区二区三区在线观看| 国产最新精品精品你懂的| aaa毛片在线观看| 经典一区二区三区| 中文字幕欧美人与畜| 国产黄色91视频| 国产一二区在线| 美日韩精品免费| 成人晚上爱看视频| 国产欧美日韩综合精品二区| 成人在线超碰| 国产精品久久久久久久久久新婚| 精品综合久久88少妇激情| 日韩视频在线观看国产| 美女诱惑一区二区| 美女精品导航| 日韩av网址在线观看| 精品国产精品自拍| 最新真实国产在线视频| 亚洲天堂av网| 久草成人在线| 天堂精品视频| 亚洲黄色片在线观看| 午夜影视一区二区三区| 亚洲最大成人免费视频| 欧美一级二级在线观看| 精品国产一区一区二区三亚瑟| 欧美精品一区二区视频| 国产欧美中文在线| 开心色怡人综合网站| **精品中文字幕一区二区三区| 日韩国产精品一区| 免费成人在线电影| 亚洲第一区第二区| 91成人精品| 一区二区传媒有限公司| 日韩三区在线观看| 天堂网在线观看国产精品| 无码少妇一区二区三区芒果| 这里只有精品在线观看| 精品一区二区免费在线观看| 成人高清免费在线播放| 91精品视频在线播放| 欧美丰满嫩嫩电影| 精品美女视频| 国产日韩在线观看av| 九九热爱视频精品视频| 国产精品高清在线| 99精品综合| 美女视频免费观看网站在线| 亚洲三级黄色在线观看| 久久精品国产在热久久| 久色国产在线| 奇米精品一区二区三区| 欧美久久久精品| 国产精品毛片大码女人 | 蜜桃视频m3u8在线观看| www.av91| 91蝌蚪porny| 天天色综合色| 偷拍自拍在线看| 无码aⅴ精品一区二区三区浪潮 | 欧美zozo| 日韩精品电影网站| 久久久成人精品视频| 欧美性大战久久| 粉嫩av一区二区三区在线播放| 亚洲一级一区| 成人淫片免费视频95视频| 国产一区自拍视频| 91精品久久久久久久久久久久久久| 一级片免费视频| www.在线视频| 中文字幕日韩欧美| 成年免费网站| 亚洲色图偷窥自拍| 国产成人精彩在线视频九色| 欧美日韩亚洲另类| 91av精品| 国产精品自在欧美一区| 中文字幕午夜精品一区二区三区| 乱人伦xxxx国语对白| 搞黄网站在线看| 激情av综合| 亚洲图片欧美视频| 狂野欧美性猛交xxxxx视频| 欧美在线视频免费播放| 日本人妖一区二区| 你懂的在线播放| 日韩精品欧美激情| 国产精品乱码一区二三区小蝌蚪| 黄网站免费久久| 羞羞网站在线免费观看| 国产精品999视频| 日韩一区二区久久久| 亚洲成人性视频| 亚洲国模精品一区| 亚洲第一国产精品| 亚洲人成电影网站色| 中文字幕视频在线免费欧美日韩综合在线看| 91国产成人在线| 91麻豆精品国产91久久久更新时间 | 69堂免费精品视频在线播放| 日韩欧美在线免费观看视频| 成人福利免费观看| 成人观看高清在线观看免费| 在线日韩欧美视频| 一本大道久久a久久综合| 盗摄精品av一区二区三区| 国产日韩1区| 日韩精品导航| 成人国产综合| 波多野结衣中文字幕久久| 成人香蕉视频| 在线日韩成人| 黄色综合网站| 成人同人动漫免费观看| 日韩视频在线观看| 欧美久久视频| 国产福利一区二区三区视频| 亚洲精品中文字幕乱码| 亚洲高清久久| 99在线|亚洲一区二区| 精品产国自在拍| 亚洲黄色影院| 校园春色综合网| 久久国产精品亚洲77777| 亚洲伊人春色| 2021年精品国产福利在线| 成人在线观看免费视频| 国产小视频在线观看| 韩国中文字幕av| 日韩毛片在线免费看| 色综合久久88色综合天天提莫| 免费在线看黄色片|