从JNI修改Java对象字段
我想在java(安卓)中声明一个int a=5,并使用ndk和c/c++对其进行修改,并在jni中更改int a的值,基本上是访问声明了哪个变量的ram段,但我不知道怎么做
public class dataclass {
int a = 5;
int b = 5;
static {
System.loadLibrary("native-lib");
}
public native void changeValue(dataclass mclass);
}
# 1 楼答案
假设您在Java中将
changeValue
声明为static
函数,您的本机代码将收到三个参数:aJNIEnv * env
、ajclass cls
和jobject obj
。后者是要操作的dataclass
的实例该方法是标准的:
env->FindClass("dataclass")
或env->GetObjectClass(obj)
获取对dataclass
类的引用env->GetFieldID(dataClass, "a", "I")
修改的字段的句柄。这里的I
是与int
相关联的原语类型李>env->SetIntField(obj, fieldId, new_value)
进行更改