2

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

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

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

  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; }

我的java结果类中的构造函数:

public Result(int result, int errType, String errMsg) {
    this.result = result;
    this.errType = errType;
    this.errMsg = errMsg;
}

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

4

0 回答 0