无法通过jni在java类中找到构造函数

时间:2013-01-02 13:31:06

标签: java android android-ndk java-native-interface android-source

我正在开发一个系统应用程序级别的服务,用于我正在构建的自定义rom。服务执行一些JNI调用,我的c ++代码应该返回自定义结果类的对象。 当它作为普通设备上的普通应用程序运行时,例如nexus 7,一切都很好,没有任何问题。

但现在出现了一个奇怪的部分:当我将服务放在我的rom目录中并编译所有内容时,它确实找到了我的结果对象的类,但它没有通过GetMethodID或该类的任何其他方法找到构造函数。 / p>

以下是我的代码的一些片段:

  1. 调用将结果对象返回给我的java代码的方法。

    
    
    
    static jobject wrapResult(jint rc, jint errCode,
                jstring errString) {
        JNIEnv *env = GetJniEnv();
        jclass lresultClass = env->FindClass(
                    "pathtoclass/Result");
        if (!lresultClass)
            LOGW(TAG, "!resultclass");
    
           jmethodID constructor = GetJniEnv()->GetMethodID(lresultClass, "<init>",
                    "(IILjava/lang/String;)V"); 
           if (!constructor)
                LOGW(TAG, "!constructor");
       jobject obj = env->NewObject(resultClass, constructor, rc, errCode,
       errString);
       return obj;
    
    } JNIEnv* GetJniEnv() { JNIEnv* pEnv = NULL; pJVM->GetEnv((void**) &pEnv, JNI_VERSION_1_4); pJVM->AttachCurrentThread(&pEnv, NULL); return pEnv; }
  2. 我的java结果类中的构造函数:

    static jobject wrapResult(jint rc, jint errCode,
                jstring errString) {
        JNIEnv *env = GetJniEnv();
        jclass lresultClass = env->FindClass(
                    "pathtoclass/Result");
        if (!lresultClass)
            LOGW(TAG, "!resultclass");
    
           jmethodID constructor = GetJniEnv()->GetMethodID(lresultClass, "<init>",
                    "(IILjava/lang/String;)V"); 
           if (!constructor)
                LOGW(TAG, "!constructor");
       jobject obj = env->NewObject(resultClass, constructor, rc, errCode,
       errString);
       return obj;
    

    我正在为galaxy nexus maguro构建,当代码尝试获取构造函数的methodID时代码失败。我不知道为什么它找到了这个类而没有找到方法。

0 个答案:

没有答案