亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.  JNI是什么?

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

2.  JNI 的意義

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

3. JNI的版本問題說明

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

在設置頁面勾選安裝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。將鼠標懸浮,然后點擊 “Creat JNI function xxxx” 就會自動在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) {
    // 這里因為jint和int的類型的范圍是一樣的,所以不需要轉(zhuǎn)換
    Calculator cal;
    jint ret = cal.Add(a, b);
    return ret;
}

4.4 程序測試

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);
    }

 運行效果

總結(jié) 

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

相關(guān)文章

  • RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解

    RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解

    這篇文章主要為大家介紹了RocketMQ消息生產(chǎn)者是如何選擇Broker示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 基于springboot實現(xiàn)redis分布式鎖的方法

    基于springboot實現(xiàn)redis分布式鎖的方法

    這篇文章主要介紹了基于springboot實現(xiàn)redis分布式鎖的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 關(guān)于Spring啟動時Context加載源碼分析

    關(guān)于Spring啟動時Context加載源碼分析

    這篇文章通過源碼分析主要給大家介紹了關(guān)于Spring啟動時Context加載的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • JavaCV攝像頭實戰(zhàn)之實現(xiàn)口罩檢測

    JavaCV攝像頭實戰(zhàn)之實現(xiàn)口罩檢測

    這篇文章主要介紹了利用JavaCV實現(xiàn)口罩檢測,功能是檢測攝像頭內(nèi)的人是否帶了口罩,把檢測結(jié)果實時標注在預覽窗口。感興趣的可以試一試
    2022-01-01
  • Java Mybatis架構(gòu)設計深入了解

    Java Mybatis架構(gòu)設計深入了解

    在本篇文章里小編給大家整理的是一篇關(guān)于Java Mybatis架構(gòu)設計詳解內(nèi)容,對此有興趣的朋友們可以參考下,希望能夠給你帶來幫助
    2021-11-11
  • JavaWeb實現(xiàn)簡單查詢商品功能

    JavaWeb實現(xiàn)簡單查詢商品功能

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)簡單查詢商品功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Postman實現(xiàn)傳List<String>集合

    Postman實現(xiàn)傳List<String>集合

    這篇文章主要介紹了Postman實現(xiàn)傳List<String>集合方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot無法訪問webapp目錄下的文件問題

    SpringBoot無法訪問webapp目錄下的文件問題

    這篇文章主要介紹了SpringBoot無法訪問webapp目錄下的文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java IO流之Properties類的使用

    Java IO流之Properties類的使用

    這篇文章主要介紹了Java IO流之Properties類的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java 多線程實例詳解(三)

    Java 多線程實例詳解(三)

    本文主要介紹 java 線程安全的知識,這里整理了相關(guān)資料及實現(xiàn)示例代碼,有興趣的小伙伴可以參考下
    2016-09-09

最新評論