繁体   English   中英

从 JNI 修改 Java 对象字段

[英]Modify Java object field from JNI

我想在 java (android) 中声明一个 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);                                 

}

假设您在 Java changeValue声明为static函数,您的本机代码将接收三个参数:一个JNIEnv * env 、一个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)进行更改

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM