在java中定义方法和静态方法
public native void accessMethod();
public native void accessStaticMethod();
javah生成头文件
/*
* Class: com_boom_JNITest
* Method: accessMethod
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessMethod
(JNIEnv *, jobject);
/*
* Class: com_boom_JNITest
* Method: accessStaticMethod
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessStaticMethod
源代码中实现具体
1.普通方法
//访问java方法
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessMethod
(JNIEnv *env, jobject jobj){
//jclass
jclass cls = (*env)->GetObjectClass(env,jobj);
//jmethodID
jmethodID mid = (*env)->GetMethodID(env,cls,"getRandomInt","(I)I");
//调用
//Call<Type>Method
jint random = (*env)->CallIntMethod(env,jobj,mid,200);
printf("random num:%#x",random);
}
2.静态方法
//访问Java静态方法
JNIEXPORT void JNICALL Java_com_boom_JNITest_accessStaticMethod
(JNIEnv *env, jobject jobj){
//jclass
jclass cls = (*env)->GetObjectClass(env,jobj);
//jmethodID 签名: ()Ljava/lang/String; 通过javap -s-p 类的犬类名 获取
jmethodID mid = (*env)->GetStaticMethodID(env,cls,"getUUID","()Ljava/lang/String;");
//调用
//CallStatic<Type>Method
jstring uuid = (*env)->CallStaticObjectMethod(env,cls,mid);
//随机文件名称 uuid.txt
//jstring -> char*
//isCopy JNI_FALSE ,代表java和C操作的是同一个字符串
char *uuid_str = (*env)->GetStringUTFChars(env,uuid,NULL);
//拼接
char filename[100];
sprintf(filename,"E://s.text",uuid_str);
FILE *fp = fopen(filename,"w");
fputs("i love u",fp);
fclose(fp);
}