//
// Created by lizhiduo on 17-9-23.
//
#include "com_example_lizhiduo_jni_JNI.h"
JNIEXPORT jstring JNICALL Java_com_example_lizhiduo_jni_JNI_sayHello
(JNIEnv * env, jclass obj){
return env->NewStringUTF("hello from jni");
}
JNIEXPORT void JNICALL Java_com_example_lizhiduo_jni_JNI_callBackHelloFromJava
(JNIEnv * env, jclass obj){
//1 得到字节码
jclass jclass1 = env->FindClass( "com/example/lizhiduo/jni/JNI");
//jclass jclass1 = env->GetObjectClass( obj);
//2 得到方法 方法签名 ()V
jmethodID jmethodID1 = env->GetMethodID( jclass1, "sayHelloFromJava", "()V");
//3 实例化对象
jobject jobject1 = env->AllocObject( jclass1);
//4 调用方法
env->CallVoidMethod( jobject1, jmethodID1);
}
JNIEXPORT jint JNICALL Java_com_example_lizhiduo_jni_JNI_callBackAdd
(JNIEnv *env, jclass obj, jint a, jint b){
//1 得到字节码
jclass jclass1 = env->FindClass( "com/example/lizhiduo/jni/JNI");
//2 得到方法 方法签名 ()V
jmethodID jmethodID1 = env->GetMethodID( jclass1, "add", "(II)I");
//3 实例化对象
jobject jobject1 = env->AllocObject( jclass1);
//4 调用方法
jint val = env->CallIntMethod( jobject1, jmethodID1, a, b);
return val;
}
上面代码便是jni中的c 代码,主要利用java的反射机制获取jni类的方法,实例化对象进行调用。 完整代码见 https://github.com/lizhiduo/jni 。
本文介绍了一段JNI C代码,该代码通过Java反射机制获取JNI类的方法,并实例化对象来调用这些方法。具体包括从Java调用的sayHello方法、从Java回调的sayHelloFromJava方法以及执行加法操作的add方法。
1271

被折叠的 条评论
为什么被折叠?



