Open codingWang opened 5 years ago
JNI开发流程:
基础知识:
demo:
char hello[20] = "Hello from C"; return (*env)->NewStringUTF(env, hello);
2.访问Java类中的属性
jclass cls = (*env)->GetObjectClass(env, jobj);//获取到类对象 jfieldID fieldId = (*env)->GetFieldID(env, cls, "name", "Ljava/lang/String;");//类中的属性ID jstring str = (*env)->GetObjectField(env, jobj, fieldId);//获取值 char *c_str = (*env)->GetStringUTFChars(env, str, JNI_FALSE);//转成C类型并处理 char text[20] = "hello "; strcat(text, c_str); jstring new_str = (*env)->NewStringUTF(env, text);//再转成JNI类型 (*env)->SetObjectField(env, jobj, fieldId, new_str);//重新赋值 return new_str;
3.调用Java层的方法
//jclass jclass cls = (*env)->GetObjectClass(env, jobj); //java method id jmethodID mid = (*env)->GetMethodID(env, cls, "genRandomInt", "(I)I"); //call method jint random = (*env)->CallIntMethod(env, jobj, mid, 200);
4.访问静态方法
jmethodID mid = (*env)->GetStaticMethodID(env, jcls, "getUUID", "()Ljava/lang/String;"); //CallStatic<Type>Method jstring uuid = (*env)->CallStaticObjectMethod(env, jcls, mid); return uuid;
5.访问构造函数
6.处理回调
7.异常处理
8.多线程处理
JNI开发流程:
基础知识:
demo:
2.访问Java类中的属性
3.调用Java层的方法
4.访问静态方法
5.访问构造函数
6.处理回调
7.异常处理
8.多线程处理