有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从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) 个答案

  1. # 1 楼答案

    假设您在Java中将changeValue声明为static函数,您的本机代码将收到三个参数:a JNIEnv * env、a jclass clsjobject obj。后者是要操作的dataclass的实例

    该方法是标准的:

    1. 使用env->FindClass("dataclass")env->GetObjectClass(obj)获取对dataclass类的引用
    2. 使用该引用获取要使用env->GetFieldID(dataClass, "a", "I")修改的字段的句柄。这里的I是与int相关联的原语类型
    3. 最后,通过调用env->SetIntField(obj, fieldId, new_value)进行更改