修改JNI NDK中String的值



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

public int a = 20 ;

然后我宣布ndk&我的项目中的java本机接口witch可以更改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声明的方法但现在我想要我的代码的字符串版本:(

tnks alot

原理相同。获取字段ID,然后使用Set*Field修改字段。

字段的签名现在是Ljava/lang/String;而不是I。您需要使用SetObjectField而不是SetIntField

除非你已经有了一个包含所需内容的jstring,否则你必须用NewStringNewStringUTF创建一个。

相关内容

最新更新