话不多说, 直接上代码。
c中调用java非静态方法
JNIEXPORT void JNICALL Java_com_dell_android_utils_JNICallback_callbackStringmethod(JNIEnv *env, jobject clazz) {
//① 获取字节码对象
jclass claz =(*env)->FindClass(env,"com/dell/android/utils/JNICallback");//class路径
//② 获取Method对象
jmethodID methodid =(*env)->GetMethodID(env,claz,"instanceMethod","(Ljava/lang/String;)V");//方法签名
jstring result =(*env)->NewStringUTF(env,"hello from c");//自己自定义处理
(*env)->CallVoidMethod(env,clazz,methodid,result);//调用方法
}
c中调用java静态方法
JNIEXPORT void JNICALL Java_com_dell_android_utils_JNICallback_callbackStringmethod(JNIEnv *env, jobject clazz) {
// jclass claz = (*env)->GetObjectClass(env, clazz);
jclass claz = (*env)->FindClass(env,"com/dell/android/utils/JNICallback");
jmethodID staticMethodID = (*env)->GetStaticMethodID(env, claz, "staticMethod", "()Ljava/lang/String;");
jstring staticMethodResult = (*env)->CallStaticObjectMethod(env,claz,staticMethodID);
获取方法签名
eclipse
cd 项目目录路径\bin\classes
javap -s com\..\类名
as
cd 项目app路径\build\intermediates\classes\debug
javap -s com\..\类名
参考
NDK开发之调用方法