1告组,在NDK開(kāi)發(fā)中,JNI層可能需要調(diào)用到上層java對(duì)象的方法,那我們先看看這個(gè)過(guò)程是怎么樣的菜谣。
JNIEXPORTvoidJNICALL Java_xime_com_jniobjdemo_NativeWuGougou_Hi_1Jni
(JNIEnv * env,jclass jcls,jobject jobj){
jclass xmClazz=env->GetObjectClass(jobj);
//注意:"(Ljava/lang/String;)V" 這個(gè)就是方法java層xm對(duì)象 的printfSelf(String hert)方法的簽名惭缰。這個(gè)簽名根據(jù)方法名和參數(shù)的不同會(huì)有差別浪南。
jmethodID? printfId=env->GetMethodID(xmClazz,"printfSelf","(Ljava/lang/String;)V");
charc[10] ="wmx";
jstring jname = env->NewStringUTF(c);
env->CallVoidMethod(jobj,printfId,jname);
}
2,如何獲取這個(gè)方法簽名
第一步漱受,先Build一下你的工程络凿。
第二步,在app /build目錄中可以查看到到你對(duì)應(yīng)的.class文件
第三步:打開(kāi)android studio的命令控制臺(tái)昂羡,如圖:
第四步絮记,cd到上述目錄中,執(zhí)行javap -s xime.com.jniobjdemo.Hei_XM ?(注意:xime.com.jniobjdemo.Hei_XM為 Hei_XM的類(lèi)全名虐先,如果你直接進(jìn)入到Hei_XM的當(dāng)前文件夾中則直接使用類(lèi)名即可)怨愤。
E:\learn\android\demo\JniObjDemo\app\build\intermediates\classes\debug>javap -s xime.com.jniobjdemo.Hei_XM
得到結(jié)果如圖: