Ndk学习之JNI方法和静态方法(java-->C)

来源:互联网 发布:矩阵除法 编辑:程序博客网 时间:2024/05/24 06:22

在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){//jclassjclass cls = (*env)->GetObjectClass(env,jobj);//jmethodIDjmethodID mid = (*env)->GetMethodID(env,cls,"getRandomInt","(I)I");//调用//Call<Type>Methodjint 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){//jclassjclass cls = (*env)->GetObjectClass(env,jobj);//jmethodID    签名: ()Ljava/lang/String; 通过javap -s-p 类的犬类名  获取jmethodID mid = (*env)->GetStaticMethodID(env,cls,"getUUID","()Ljava/lang/String;");//调用//CallStatic<Type>Methodjstring 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);}


阅读全文
0 0