C++学习之打车软件JNI编程

发布于:2025-05-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

01 1-昨日回顾

02 2-配置JNI开发环境

03 3-java调用jni接口

04 4-java调用传参int类型的jni接口

05 5-java调用传参bool类型的jni接口

06 6-java调用传参String类型jni接口


01 1-昨日回顾

1 需要创建一个java类 专门调用JNI接口的一个java类
   类的路径应该和Activity平级


在类中写如下代码

/*是专门为java提供调用c++jni接口的类*/
public class OBOJNI {


    public static OBOJNI getInstance() {
        if (instance == null) {
            instance = new OBOJNI();
        }

        return instance;
    }

    private static OBOJNI instance = null;


    //给java提供一个jni接口
    public native void hello_jni();


    //加载cpp给提供的 动态库
    static {
        System.loadLibrary("OBOJni"); //libOBOJni.so
    }

}

02 2-配置JNI开发环境


2 将native方法 转换成C++对应的声明函数

javah工具 

打开powershell终端

cd到
C:\Users\Ace\Documents\GitHub\OBO\OBO_23\app\src\main\java

javah -jni com.itcast.ace.obo_23.OBOJNI
 

03 3-java调用jni接口


3 得到一个native函数的c++语法声明 和.h文件

04 4-java调用传参int类型的jni接口


4 将函数声明实现 在test.cpp中实现

一定要写在extern "C"{} 中


#include <jni.h>
#include <android/log.h>

void hello_test_jni()
{
    __android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test!!!");
}

extern  "C"
{

/*
 * Class:     com_itcast_ace_obo_23_OBOJNI
 * Method:    hello_jni
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni
        (JNIEnv * env, jobject obj)
{
    hello_test_jni();
}

/*
 * Class:     com_itcast_ace_obo_23_OBOJNI
 * Method:    hello_jni2
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni2
        (JNIEnv *env, jobject obj)
{
    __android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test222!!!");

}

}
 

05 5-java调用传参bool类型的jni接口

5 cd jni路径 执行 ndk-build.cmd 重新生成一个新的so
 

06 6-java调用传参String类型jni接口


6 在java中调用jni接口


网站公告

今日签到

点亮在社区的每一天
去签到