从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/

10-10 12:39