最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JNI實(shí)現(xiàn)Java調(diào)用C/C++代碼詳細(xì)代碼示例

 更新時(shí)間:2025年02月20日 10:27:29   作者:WolfAndCat  
這篇文章主要介紹了JNI實(shí)現(xiàn)Java調(diào)用C/C++代碼的相關(guān)資料,JNI是Java/Kotlin與C/C++語言之間的交互橋梁,用于調(diào)用C/C++代碼以解決高性能問題,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1.  JNI是什么?

JNI(Java Native Interface),是實(shí)現(xiàn)Java/Kotlin與C/C++語言之間交互的橋梁。說的更簡(jiǎn)單易懂一點(diǎn),就是java語言和C++語言要想交互的話,必然存在數(shù)據(jù)類型之間不兼容的問題,這時(shí)候必須要有一個(gè)中間層去做轉(zhuǎn)換。

2.  JNI 的意義

我們?cè)趯?shí)際項(xiàng)目開發(fā)中,很多高性能的算法,游戲畫面渲染,音視頻編解碼等方面的程序都是用C/C++開發(fā)的。JNI可以幫助我們實(shí)現(xiàn)調(diào)用這些C/C++的代碼,也可以實(shí)現(xiàn)C/C++代碼調(diào)用外部的Java/Kotlin代碼。這樣做到既然滿足Java語言可以快速開發(fā)Java后端或者Android客戶端業(yè)務(wù),也可以滿足底層應(yīng)用所需要的性能問題。

3. JNI的版本問題說明

JNI存在JDK和NDK兩種版本,JNI最初是存在JDK里面的,后來NDK里面專門對(duì)JNI進(jìn)行了封裝。NDK(Native Development Kit)是Android平臺(tái)提供的Native 開發(fā)工具集,所以我們目前開發(fā)Android程序都是采用NDK里面的JNI。

在設(shè)置頁(yè)面勾選安裝NDK和CMake

4. JNI工程創(chuàng)建

4.1 創(chuàng)建Native C++工程

4.2 在cpp目錄下添加C++文件

Calculator.h

#ifndef JNITEST_CALCULATOR_H
#define JNITEST_CALCULATOR_H

class Calculator {
public:
    int Add(int a, int b);
};

#endif //JNITEST_CALCULATOR_H

Calculator.cpp

#include "Calculator.h"

int Calculator::Add(int a, int b)
{
    return a + b;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.22.1)

project("jnitest")

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

add_library(${CMAKE_PROJECT_NAME} SHARED
        native-lib.cpp
        Calculator.cpp)

target_link_libraries(${CMAKE_PROJECT_NAME}
        android
        log)

4.3 java調(diào)用C++程序

在java文件中添加調(diào)用函數(shù),函數(shù)聲明加上native。將鼠標(biāo)懸浮,然后點(diǎn)擊 “Creat JNI function xxxx” 就會(huì)自動(dòng)在native-lib.cpp文件中生成JNI的函數(shù)

完善native-lib.cpp中的JNI的函數(shù)

#include <jni.h>
#include <string>
#include "Calculator.h"

extern "C"
JNIEXPORT jint JNICALL
Java_com_cat_jnitest_MainActivity_CplusplusAdd(JNIEnv *env, jobject thiz, jint a, jint b) {
    // 這里因?yàn)閖int和int的類型的范圍是一樣的,所以不需要轉(zhuǎn)換
    Calculator cal;
    jint ret = cal.Add(a, b);
    return ret;
}

4.4 程序測(cè)試

java中調(diào)用

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        TextView tv = binding.sampleText;
        String str = "JNI: a + b = ";
        int add = CplusplusAdd(100, 200);
        str += String.valueOf(add);
        tv.setText(str);
    }

 運(yùn)行效果

總結(jié) 

到此這篇關(guān)于JNI實(shí)現(xiàn)Java調(diào)用C/C++代碼的文章就介紹到這了,更多相關(guān)JNI實(shí)現(xiàn)Java調(diào)用C/C++內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?jdk升級(jí)版本注意事項(xiàng)經(jīng)驗(yàn)分享

    Java?jdk升級(jí)版本注意事項(xiàng)經(jīng)驗(yàn)分享

    這篇文章主要介紹了Java?jdk升級(jí)版本注意事項(xiàng)的相關(guān)資料,涉及兼容性風(fēng)險(xiǎn)、JVM與GC機(jī)制變更、運(yùn)維與環(huán)境配置風(fēng)險(xiǎn)等多方面內(nèi)容,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-02-02
  • @Value注入List、數(shù)組、Set、Map問題

    @Value注入List、數(shù)組、Set、Map問題

    這篇文章主要介紹了@Value注入List、數(shù)組、Set、Map問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java實(shí)現(xiàn)調(diào)用對(duì)方http接口得到返回?cái)?shù)據(jù)

    Java實(shí)現(xiàn)調(diào)用對(duì)方http接口得到返回?cái)?shù)據(jù)

    這篇文章主要介紹了Java實(shí)現(xiàn)調(diào)用對(duì)方http接口得到返回?cái)?shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于Java中字符串indexof() 的使用方法

    基于Java中字符串indexof() 的使用方法

    今天小編就為大家分享一篇基于Java中字符串indexof() 的使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • spring中WebClient如何設(shè)置連接超時(shí)時(shí)間以及讀取超時(shí)時(shí)間

    spring中WebClient如何設(shè)置連接超時(shí)時(shí)間以及讀取超時(shí)時(shí)間

    這篇文章主要給大家介紹了關(guān)于spring中WebClient如何設(shè)置連接超時(shí)時(shí)間以及讀取超時(shí)時(shí)間的相關(guān)資料,WebClient是Spring框架5.0引入的基于響應(yīng)式編程模型的HTTP客戶端,它提供一種簡(jiǎn)便的方式來處理HTTP請(qǐng)求和響應(yīng),需要的朋友可以參考下
    2024-08-08
  • 詳解Java接口簽名(Signature)實(shí)現(xiàn)方案

    詳解Java接口簽名(Signature)實(shí)現(xiàn)方案

    這篇文章主要介紹了Java接口簽名(Signature)實(shí)現(xiàn)方案?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • springboot驗(yàn)證碼生成以及驗(yàn)證功能舉例詳解

    springboot驗(yàn)證碼生成以及驗(yàn)證功能舉例詳解

    登錄注冊(cè)是大部分系統(tǒng)需要實(shí)現(xiàn)的基本功能,同時(shí)也會(huì)對(duì)登錄驗(yàn)證增加需求,下面這篇文章主要給大家介紹了關(guān)于springboot驗(yàn)證碼生成以及驗(yàn)證功能的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號(hào))

    Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號(hào))

    這篇文章主要給大家介紹了關(guān)于Java常用的數(shù)據(jù)脫敏(手機(jī)、郵箱、身份證號(hào))的相關(guān)資料,信息脫敏對(duì)某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下
    2023-07-07
  • 詳解java中的Collections類

    詳解java中的Collections類

    這篇文章主要為大家詳細(xì)介紹了java中的Collections類,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Spring boot集成Kafka消息中間件代碼實(shí)例

    Spring boot集成Kafka消息中間件代碼實(shí)例

    這篇文章主要介紹了Spring boot集成Kafka消息中間件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

铁岭县| 临潭县| 津市市| 新巴尔虎右旗| 玉林市| 台南市| 图木舒克市| 红河县| 陆河县| 三亚市| 堆龙德庆县| 新巴尔虎左旗| 顺平县| 辛集市| 永德县| 明光市| 西吉县| 增城市| 孝义市| 龙井市| 翁牛特旗| 博兴县| 昌江| 浮梁县| 察隅县| 五华县| 林芝县| 石楼县| 涡阳县| 襄垣县| 屏南县| 崇阳县| 孝义市| 绥芬河市| 昆明市| 凌海市| 会东县| 商南县| 布尔津县| 林周县| 苗栗县|