我正在开发一个系统应用程序级别的服务,用于我正在构建的自定义rom。服务执行一些JNI调用,我的c ++代码应该返回自定义结果类的对象。 当它作为普通设备上的普通应用程序运行时,例如nexus 7,一切都很好,没有任何问题。
但现在出现了一个奇怪的部分:当我将服务放在我的rom目录中并编译所有内容时,它确实找到了我的结果对象的类,但它没有通过GetMethodID或该类的任何其他方法找到构造函数。 / p>
以下是我的代码的一些片段:
调用将结果对象返回给我的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结果类中的构造函数:
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时代码失败。我不知道为什么它找到了这个类而没有找到方法。