从JNI内部,如何获取字符串资源ID? 例如,在Java中它看起来像
final int langId = R.string.LANGUAGE;
有自动生成的R.java:
package com.my.game;
...
public final class R {
...
public static final class string {
public static int LANGUAGE=0x7f06001c;
...
}
...
}
我试过
jclass rcl = jni_env->FindClass("com.my.game.R.string");
assert(rcl);
jfieldID fid = jni_env->GetFieldID(rcl, "LANGUAGE", "(I)");
assert(fid);
int langId = jni_env->GetStaticIntField(rcl, fid);
但是第一个断言(assert(rcl)
)被解雇了。
答案 0 :(得分:2)
您的代码中存在三个问题:
首先,string
类嵌套在com.my.game.R
内。要通过JNI访问它,你必须这样写:
com.my.game.R$string
第二个问题:该字段是静态的,因此您必须使用GetStaticFieldID
代替GetFieldID
。
最后,GetFieldID
想要一个字段签名。字段不是方法,因此括号在这里是错误的。字段签名只是I
。