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

无法通过jni在java类中找到构造函数,java,android,android-ndk,java-native-interface,android-source,Java,Android,Android Ndk,Java Native Interface,Android Source,我正在为我目前正在构建的自定义rom开发系统应用程序级别的服务。该服务执行一些JNI调用,而我的C++代码应该返回自定义结果类的对象。 当它在普通设备(如nexus 7)上作为普通应用程序运行时,一切正常,没有任何问题 但现在出现了奇怪的部分:当我把服务放在我的rom目录中并编译所有内容时,它确实找到了我的结果对象的类,但它没有通过GetMethodID或该类的任何其他方法找到构造函数 以下是我的一些代码片段: 调用该方法以将结果对象返回到我的java代码 static jobject wr

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

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

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

  • 调用该方法以将结果对象返回到我的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时,代码失败。我不知道为什么它只找到类而没有方法。

    javap-s给出了什么?public path.Result(int,int,java.lang.String);签名:(IILjava/lang/String;)V正是我正在使用的签名。我认为调用getJniEnv两次可能会有问题,因为每次都会附加线程。尝试使用env变量调用getMethodID@njzk2,如果线程已连接(或),则AttachCurrentThread本质上是no op。Cattivo,当您为rom目标编译时,您确定您正在构建相同的、完全有效的本机库并导出所有符号吗?您能从rom中取出lib并查看导出的符号吗?但是GetEnv每次都返回相同的指针吗?
    public Result(int result, int errType, String errMsg) {
        this.result = result;
        this.errType = errType;
        this.errMsg = errMsg;
    }