目录
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接口