从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)
)被触发了。 最佳答案
您的代码中存在三个问题:
首先,string
类嵌套在com.my.game.R
内。要通过JNI访问它,您必须这样编写:
com.my.game.R$string
第二个问题:该字段是静态的,因此您必须使用
GetStaticFieldID
而不是GetFieldID
。最后,
GetFieldID
需要一个字段签名。字段不是方法,因此此处的括号是错误的。字段签名只是I
。关于java - 如何从jni获取字符串资源ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19334749/