在C代码中调用java方法的步骤:
C代码中调用java的方法,非常类似于java中的反射调用
一:获得字节码
// jclass (*FindClass)(JNIEnv*, const char*);
jclass clazz = (*env)->FindClass(env,"zz/itcast/pay/MainActivity");
* FindClass 方法中第二个参数是类的全名,但是将.换成了文件分隔符 /
二:获得指定的方法,或者说,是获得方法的ID
// jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
// 第三个参数是方法的名称。
// 最后一个参数是该方法的签名
jmethodID method = (*env)->GetMethodID(env,clazz,"setMessage","(Ljava/lang/String;)V");
* 方法的签名获得方式:
* 打开bin/classes 目录 执行 javap -s zz.itcast.pay.MainActivity 命令
* 就可获得该类中,所有的方法的签名
三:调用方法
// void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
jstring jstr = (*env)->NewStringUTF(env,"本地数据加密");
(*env)->CallVoidMethod(env,obj,method,jstr);
* CallVoidMethod 中第二个参数是,调用该方法的java对象
* 第三个参数是 method
* 以后是可变参数,是指该方法调用时需要的真实的参数。注意,是java认识的类型
JNI开发,java向C代码传递数据的原则
KISS KEEP IT SIMPLE STUPID