JNI反射

JNI反射

1.通过env指针获取jclass对象
2.通过env指针获取jmethodId
3.通过env指针反射调用方法

  1. 方法签名可以通过工具生成javap -s 对应class文件
  2. 有的方法参数需要转换Jni数据结构类型,否则会报错,比如String类型需要通过env指针转换
    (*env)->NewStringUTF(env, “这是弹窗的内容”)
    返回值的类型也是需要转换的
1
2
3
4
5
6
7
8
//生成jclas对象
jclass jclass1=(*env)->FindClass(env,"com/aimissu/testffmpeg/MainActivity");
//生成jmethodid
jmethodID jmethodID1=(*env)->GetStaticMethodID(env,jclass1,"testReflect","()V");
//反射并且调用方法
(*env)->CallStaticVoidMethod(env,jclass1,jmethodID1);
//删除本地引用释放内存,避免内存泄漏
(*env)->DeleteLocalRef(env,jclass1);