Android jni c 方法调用记录

59 阅读1分钟

1 获取静态内部类写法(注意$)

jclass buildCls = env->FindClass("android/os/Build$VERSION");

2 根据对象获取对象对应的class

jclass ctxCls = env->GetObjectClass(context);

3 根据全路径获取class

jclass listCls = env->FindClass("java/util/List");

4 返回值如果是list的时候,声明返回值方式

jmethodID queryIntentActivitiesMethodId = env->GetMethodID(packageManagerCls,"queryIntentActivities","(Landroid/content/Intent;I)Ljava/util/List;");

5 调用方法的方式

//获取方法id
jmethodID listIteratorMethodId = env->GetMethodID(listCls,"iterator","()Ljava/util/Iterator;");

//调用指定对象的方法
jobject  listIterator = env->CallObjectMethod(list,listIteratorMethodId);

6 获取变量

//获取变量id
jfieldID activityInfoFieldId =  env->GetFieldID(resolveInfoCls,"activityInfo","Landroid/content/pm/ActivityInfo;");
//获取变量的值
jobject activityInfo = env->GetObjectField(itemFirst,activityInfoFieldId);

7 参数是int类型的声明方式 (“I”)

jfieldID DONT_KILL_APPFieldId = env->GetStaticFieldID(packageManagerCls,"DONT_KILL_APP","I");

8 连着两个参数都是int的声明方式 (“II”)

jmethodID setComponentEnabledSettingMethodId = env->GetMethodID(packageManagerCls,"setComponentEnabledSetting",
                                                                "(Landroid/content/ComponentName;II)V");