在 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
,否则您必须使用 NewString
或 NewStringUTF
创建一个。
我的 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
,否则您必须使用 NewString
或 NewStringUTF
创建一个。