簡體   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