我正在为我目前正在构建的自定义 rom 开发系统应用程序级别的服务。该服务执行一些 JNI 调用,我的 c++ 代码应该返回一个自定义结果类的对象。当它在普通设备(例如nexus 7)上作为普通应用程序运行时,一切正常,完全没有问题。
但现在出现了奇怪的部分:当我将服务放在我的 rom 目录中并编译所有内容时,它确实找到了我的结果对象的类,但它没有通过 GetMethodID 或该类的任何其他方法找到构造函数。
以下是我的一些代码片段:
被调用以将结果对象返回到我的 java 代码的方法。
} JNIEnv* GetJniEnv() { JNIEnv* pEnv = NULL; pJVM->GetEnv((void**) &pEnv, JNI_VERSION_1_4); pJVM->AttachCurrentThread(&pEnv, NULL); return pEnv; }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;
我的java结果类中的构造函数:
public Result(int result, int errType, String errMsg) {
this.result = result;
this.errType = errType;
this.errMsg = errMsg;
}
我正在为galaxy nexus maguro 构建,当它尝试获取构造函数的methodID 时代码失败。我不知道为什么它会找到类但没有方法。