3

从 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 ( assert(rcl)) 被触发了。

4

1 回答 1

3

您的代码存在三个问题:

首先,string类嵌套在com.my.game.R. 要通过 JNI 访问它,您必须这样编写:

com.my.game.R$string

第二个问题:该字段是静态的,所以你必须使用GetStaticFieldID而不是GetFieldID.

最后,GetFieldID想要一个字段签名。字段不是方法,所以这里的括号是错误的。字段签名只是I.

于 2013-10-12T14:38:39.050 回答