Android JNI 笔记 | GetObjectClass、FindClass和GetMethodID

GetObjectClass

jclass GetObjectClass(jobject obj)

obj 参数示意
jobject obj:Java 中传入的 object 类

使用小栗子(其中的 GetMethodID 函数请往下看)

extern "C"
JNIEXPORT jobject JNICALL
Java_....getList(JNIEnv *env, jobject instance, jobject listobj) {
  ....
  // 获取 List 类
  jclass ax_list_jclass = env->GetObjectClass(listobj);
  // 获取 list 的 get方法
  jmethodID listGetMe;
  listGetMe = env->GetMethodID(ax_list_jclass, "get", "(I)Ljava/lang/Object;");
  // 调用 list 的 get 方法获取list中第0个的 java 类。
  jobject findObj = env->CallObjectMethod(listobj, listGetMe , 0);
  ....
}
FindClass(查找java中的类)

jclass FindClass(const char* name)

name 参数示意
const char* name:java中完整报名加类名,例如List类:"java/util/List"

小栗子:

extern "C"
JNIEXPORT jobject JNICALL
Java_....getList(JNIEnv *env, jobject instance) {
  ....
  // 获取 List 类
  jclass list_jclass = env->FindClass("java/util/List");
  ....
}
GetMethodID(查找Java类中的方法)

jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
 参数一:jclass 查找到的java类
 参数二:const char* name 方法名

name 参数示意
"<init>" 构造函数
"add" 名为add的方法,可根据方法名修改

 参数三:const char* sig 方法的返回值

sig参数示意:
boolean:Zbyte:Bchar:Cshort:Sint:I
long:Jfloat:Fdouble:Dvoid:V[数组]:[和类型
Object对象:L包名/类名; 或 包名/类名$标识嵌套类;
例子(方法 ->- 对应的sig):
void M1(int A,int B) ->- "(II)V"
void M2(String S) ->- "(Ljava/lang/String;)V"
void M3(int[] I) ->- "([I)V"
String M4(String S) ->- "(Ljava/lang/String;)Ljava/lang/String"
long M5(int I,Class class) ->- "(ILjava/lang/Class;)J"
void M6(long LONG) ->- "(J)V"

小栗子:

extern "C"
JNIEXPORT jobject JNICALL
Java_....getList(JNIEnv *env, jobject instance) {
  ....
  // 获取 ArrayList 类
  jclass list_jclass = env->FindClass("java/util/ArrayList");
  // 获取 ArrayList 构造函数id
  jmethodID list_init = env->GetMethodID(list_jcs, "<init>", "()V");
  // 创建一个 ArrayList 对象
  jobject list_obj = env->NewObject(list_jcs, list_init, "");
  // 获取 ArrayList 对象的 add() 的 methodID
  jmethodID list_add = env->GetMethodID(list_jcs, "add", "(Ljava/lang/Object;)Z");
  ....
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容