在 JNI NDK 中修改 String 的值

Modify value of String in JNI NDK

我的 java 代码中有一个 int a = 20

    public int a = 20 ;

然后我在我的项目中声明了 ndk & java 本机接口 可以更改 int a = 20 的值 到 a= 100 ,意味着我的本机代码将 int a = 20 更改为 100 ;

    static {
    System.loadLibrary("native-lib");
}
public static native void myfunction (MyChangeActivity mclass);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_change);

    myfunction(this);

这里是写的c++代码id

JNIEXPORT void JNICALL
Java_org_lotka_ndk_1hello_1world_MyChangeActivity_myfunction(
    JNIEnv *env ,
    jclass cls,
    jobject obj){
jclass myjclass = env->GetObjectClass(obj);
jfieldID myjfield =  env->GetFieldID(myjclass, "a", "I") ;
env->SetIntField(obj, myjfield, 100);
}

完成

我有一个整数,它的值为 20

int a = 20

但是jni之后a部分会增加到100

现在我的问题是如何使用 String

我一开始就想要这个

String b = "website.com"

并将其更改为

String b = "google.com"

我想要所有的东西都通过 ndk 和我在顶部为 int 声明的方法 但现在我想要我的代码的字符串版本:)

非常感谢

原理是一样的。你得到字段ID,然后你用Set*Field.

修改字段

The signature 字段现在是 Ljava/lang/String; 而不是 I。而不是 SetIntField 你需要使用 SetObjectField.

并且除非您已经拥有包含所需内容的 jstring,否则您必须使用 NewStringNewStringUTF 创建一个。