日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

c改java_Android NDK开发:C修改Java的属性

發(fā)布時間:2025/6/15 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c改java_Android NDK开发:C修改Java的属性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

C修改Java非靜態(tài)屬性

Java代碼

public class JniDemo {

private String name = "迪迦";

static {

System.load("D:\\Project\\VS\\C訪問Java屬性\\x64\\Release\\C訪問Java屬性.dll");

}

public static void main(String[] args){

JniDemo jniDemo = new JniDemo();

System.out.println(jniDemo.name);

jniDemo.changeName();

System.out.println(jniDemo.name);

}

public native void changeName();

}

C代碼(這里的邏輯需要倒著想,先調(diào)用修改屬性的方法然后創(chuàng)建需要的參數(shù)),這里Jni修改屬性跟Java中的反射差不多

//修改非靜態(tài)屬性

JNIEXPORT void JNICALL Java_JniDemo_changeName

(JNIEnv* env, jobject jobj) {

/*

3.創(chuàng)建 clazz

此方法需要的參數(shù)為 (JNIEnv *env, jobject obj);

其中各個參數(shù)的含義為:

env:C與Java交互的橋梁

obj:Java中的對象

*/

jclass clazz = (*env)->GetObjectClass(env,jobj);

/*

2.創(chuàng)建 fieldID

此方法需要的參數(shù)為 (JNIEnv *env, jclass clazz, const char *name, const char *sig);

其中各個參數(shù)的含義為:

env:C與Java交互的橋梁

name:屬性的名字

sig:屬性的簽名

(需要創(chuàng)建的變量有:clazz ,name,sig)

*/

char* name = "name";

char* sig = "Ljava/lang/String;";

jfieldID fieldID = (*env)->GetFieldID(env,clazz, name, sig);

/*

1.設(shè)置屬性的值

此方法需要的參數(shù)為 (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);

其中各個參數(shù)的含義為:

env:C與Java交互的橋梁

fieldID:屬性的id

val:要設(shè)置的值

(需要創(chuàng)建的變量有:fieldID ,val)

*/

jstring val = (*env)->NewStringUTF(env,"Jack");

(*env)->SetObjectField(env,jobj, fieldID,val);

}

C修改Java靜態(tài)屬性

Java代碼

public class JniDemo {

private static int age = 10;

static {

System.load("D:\\Project\\VS\\C訪問Java屬性\\x64\\Release\\C訪問Java屬性.dll");

}

public static void main(String[] args){

System.out.println(JniDemo.age);

changeStaticAge();

System.out.println(JniDemo.age);

}

public static native void changeStaticAge();

}

C代碼

//修改靜態(tài)屬性

JNIEXPORT void JNICALL Java_JniDemo_changeStaticAge

(JNIEnv* env, jclass clazz){

/*

2.創(chuàng)建 fieldID

此方法需要的參數(shù)為 (JNIEnv *env, jclass clazz, const char *name, const char *sig);

其中各個參數(shù)的含義為:

env:C與Java交互的橋梁

name:屬性的名字

sig:屬性的簽名

(需要創(chuàng)建的變量有:clazz ,name,sig)

*/

char* name = "age";

char* sig = "I";

jfieldID fieldID = (*env)->GetStaticFieldID(env, clazz, name, sig);

/*

1.設(shè)置屬性的值

此方法需要的參數(shù)為 (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);

其中各個參數(shù)的含義為:

env:C與Java交互的橋梁

clazz:Java字節(jié)碼對象

fieldID:屬性的id

value:要設(shè)置的值

(需要創(chuàng)建的變量有:fieldID ,value)

*/

jint value = 20;

(*env)->SetStaticIntField(env,clazz,fieldID, value);

}

獲取Java屬性和方法的簽名

獲取Java類中的方法和屬性的簽名使用的是javap命令

javap -p -s 全類名

我這沒有創(chuàng)建包所以直接使用的類名,方法與屬性的簽名就是descriptor對應(yīng)的值

相關(guān)文章

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的c改java_Android NDK开发:C修改Java的属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。