从JNI实例化Java类

时间:2013-07-13 09:54:25

标签: android android-ndk

我需要在我的本机代码中创建一个Java类的实例。为此,我使用以下C代码:

jobject Java_com_mypackage__myClass_myMethod(JNIEnv* env, jobject thiz, jint index){
    int fd = pDevs[index].ufds.fd; // fd = open(....); it's a input/eventX file.
    jclass class = (*env)->FindClass(env,"com/mypackage/ClassName");
    jmethodID mid = (*env)->GetMethodID(env,class,"<init>","(Ljava/lang/String;)V");
    return (*env)->NewObject(env,class,mid,(*env)->NewStringUTF(env, pDevs[index].device_path));
}

但是当我调用myMethod时,我不断发出致命的信号11(SIGSEGV)。代码错了吗?

1 个答案:

答案 0 :(得分:1)

您应该使用logging / debbuger来查找发生分段错误的位置。最简单的方法是使用描述的android日志系统 here

jclass class = (*env)->FindClass(env,"com/mypackage/ClassName");
if(class == null)
{
  __android_log_print(ANDROID_LOG_VERBOSE, "TAG", "class is null");
}

例如,如果ClassName是某个活动的内部类,则应使用com / mypackage / ActivityName#ClassName而不是com / mypackage / ClassName。但在提供日志之前我只能猜测。