如何从jni获取字符串资源ID?

时间:2013-10-12 13:31:25

标签: java android java-native-interface

从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))被解雇了。

1 个答案:

答案 0 :(得分:2)

您的代码中存在三个问题:

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

com.my.game.R$string

第二个问题:该字段是静态的,因此您必须使用GetStaticFieldID代替GetFieldID

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