当前位置: 代码网 > it编程>编程语言>Java > JNI实现Java调用C/C++代码详细代码示例

JNI实现Java调用C/C++代码详细代码示例

2025年02月20日 Java 我要评论
1.jni是什么?jni(java native interface),是实现java/kotlin与c/c++语言之间交互的桥梁。说的更简单易懂一点,就是java语言和c++语言要想交互的话,必然存

1.  jni是什么?

jni(java native interface),是实现java/kotlin与c/c++语言之间交互的桥梁。说的更简单易懂一点,就是java语言和c++语言要想交互的话,必然存在数据类型之间不兼容的问题,这时候必须要有一个中间层去做转换。

2.  jni 的意义

我们在实际项目开发中,很多高性能的算法,游戏画面渲染,音视频编解码等方面的程序都是用c/c++开发的。jni可以帮助我们实现调用这些c/c++的代码,也可以实现c/c++代码调用外部的java/kotlin代码。这样做到既然满足java语言可以快速开发java后端或者android客户端业务,也可以满足底层应用所需要的性能问题。

3. jni的版本问题说明

jni存在jdk和ndk两种版本,jni最初是存在jdk里面的,后来ndk里面专门对jni进行了封装。ndk(native development kit)是android平台提供的native 开发工具集,所以我们目前开发android程序都是采用ndk里面的jni。

在设置页面勾选安装ndk和cmake

4. jni工程创建

4.1 创建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调用c++程序

在java文件中添加调用函数,函数声明加上native。将鼠标悬浮,然后点击 “creat jni function xxxx” 就会自动在native-lib.cpp文件中生成jni的函数

完善native-lib.cpp中的jni的函数

#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的类型的范围是一样的,所以不需要转换
    calculator cal;
    jint ret = cal.add(a, b);
    return ret;
}

4.4 程序测试

java中调用

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

 运行效果

总结 

到此这篇关于jni实现java调用c/c++代码的文章就介绍到这了,更多相关jni实现java调用c/c++内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com