#include #include#include#include"com_example_provider_CallbackJava.h";
#include"com_example_jni_MainActivity.h";
#include
#define LOG_TAG "System.out.c"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)jmethodID getMethodId(JNIEnv* env, char* methodname, char*signname) {
jclass jclazz= (*env)->FindClass(env, "com/example/provider/CallbackJava");if (jclazz == 0) {
LOGD("class not find");return;
}//2、找class中方法的id,第三个参数方法名称,第四个参数该方法对应的签名
jmethodID methodid = (*env)->GetMethodID(env, jclazz, methodname, signname);if (methodid == 0) {
LOGD("method not find");return;
}returnmethodid;
}
JNIEXPORTvoidJNICALL Java_com_example_provider_CallbackJava_callHelloFromJava
(JNIEnv*env, jobject obj) {//1、 找java中的class文件//第二个参数是类名的(包名)
jclass jclazz = (*env)->FindClass(env,"com/example/provider/CallbackJava");if(jclazz==0) {
LOGD("class not find");return;
}//2、找class中方法的id,第三个参数方法名称,第四个参数该方法对应的签名
jmethodID methodid = (*env)->GetMethodID(env, jclazz,"helloFromJava","()V");if(methodid==0) {
LOGD("helloFromJava method not find");return;
}//3、调用方法//void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
(*env)->CallVoidMethod(env,obj,methodid);
}
JNIEXPORTvoidJNICALL Java_com_example_provider_CallbackJava_callAdd
(JNIEnv*env, jobject obj) {
jmethodID mid= getMethodId(env,"Add","(II)I");int result = (*env)->CallIntMethod(env, obj, mid,3,6);
LOGD("c to java add: d%",result);
}
JNIEXPORTvoidJNICALL Java_com_example_provider_CallbackJava_callPrintString
(JNIEnv*env, jobject obj) {
LOGD("c to java callPrintString start");
jmethodID mid= getMethodId(env,"printString","(Ljava/lang/String;)V");
(*env)->CallVoidMethod(env, obj, mid,(*env)->NewStringUTF(env,"call printString finish"));
LOGD("c to java callPrintString finish");
}
JNIEXPORTvoidJNICALL Java_com_example_provider_CallbackJava_callPrintStaticStr
(JNIEnv*env, jobject obj) {
jclass jclazz= (*env)->FindClass(env, "com/example/provider/CallbackJava");if (jclazz == 0) {
LOGD("class not find");return;
}//静态方法调用GetStaticMethodID 和 CallStaticXXXMethod
jmethodID methodid = (*env)->GetStaticMethodID(env, jclazz, "printStaticStr", "(Ljava/lang/String;)V");if (methodid == 0) {
LOGD("printStaticStr method not find");return;
}
(*env)->CallStaticVoidMethod(env, jclazz, methodid,(*env)->NewStringUTF(env,"static hello java"));
}
JNIEXPORTvoidJNICALL Java_com_example_jni_MainActivity_callProvider
(JNIEnv*env, jobject obj){
jclass jclazz= (*env)->FindClass(env,"com/example/provider/CallbackJava");if(jclazz==0) {
LOGD("class not find");return;
}
jmethodID methodid= (*env)->GetMethodID(env, jclazz,"helloFromJava","()V");if(methodid==0) {
LOGD("helloFromJava method not find");return;
}//创建一个CallbackJava对象
jobject jobj =(*env)->AllocObject(env, jclazz);
(*env)->CallVoidMethod(env,jobj,methodid);
}