1,在NDK开发中,JNI层可能需要调用到上层java对象的方法,那我们先看看这个过程是怎么样的。
JNIEXPORTvoidJNICALL Java_xime_com_jniobjdemo_NativeWuGougou_Hi_1Jni
(JNIEnv * env,jclass jcls,jobject jobj){
jclass xmClazz=env->GetObjectClass(jobj);
//注意:"(Ljava/lang/String;)V" 这个就是方法java层xm对象 的printfSelf(String hert)方法的签名。这个签名根据方法名和参数的不同会有差别。
jmethodID printfId=env->GetMethodID(xmClazz,"printfSelf","(Ljava/lang/String;)V");
charc[10] ="wmx";
jstring jname = env->NewStringUTF(c);
env->CallVoidMethod(jobj,printfId,jname);
}
2,如何获取这个方法签名
第一步,先Build一下你的工程。
第二步,在app /build目录中可以查看到到你对应的.class文件
第三步:打开android studio的命令控制台,如图:
第四步,cd到上述目录中,执行javap -s xime.com.jniobjdemo.Hei_XM (注意:xime.com.jniobjdemo.Hei_XM为 Hei_XM的类全名,如果你直接进入到Hei_XM的当前文件夹中则直接使用类名即可)。
E:\learn\android\demo\JniObjDemo\app\build\intermediates\classes\debug>javap -s xime.com.jniobjdemo.Hei_XM
得到结果如图: