c/c++调用java属性和函数

NIEXPORT jstring JNICALL

Java_com_example_liyang_myapplication_MainActivity_stringFromJNI(

JNIEnv *env,

jobject jobj) {

int i=0;

//非静态属性

    jclass clazz=env->GetObjectClass(jobj);

jfieldID jintid=env->GetFieldID(clazz,"anInt","I");

int a=25;

LOGE("%d",a);

env->SetIntField(jobj, jintid, a);

//静态属性

    jfieldID js_intid=env->GetStaticFieldID(clazz,"s_anInt","I");

LOGE("%d %d",i++,env->GetStaticIntField(clazz,js_intid));

env->SetStaticIntField(clazz, js_intid,35);

LOGE("%d %d",i++,env->GetStaticIntField(clazz,js_intid));

//方法

    jmethodID jsmid=env->GetMethodID(clazz,"temp","(I)I");

env->CallIntMethod(jobj, jsmid,56);

//静态方法

//    stemp

    jmethodID jsmi=env->GetStaticMethodID(clazz,"stemp","(ILjava/lang/String;)I");

jstring str=env->NewStringUTF("hello");

env->CallStaticIntMethod(clazz,jsmi,11,str);

//子类构造方法

    jfieldID jsid=env->GetFieldID(clazz,"father","Lcom/example/liyang/myapplication/Father;");

jobject son1=env->GetObjectField(jobj, jsid);

jclass cls_son=env->GetObjectClass(son1);

jmethodID jomid=env->GetMethodID(cls_son,"drive","()V");

env->CallVoidMethod(son1, jomid,NULL);

//父类构造方法

    jclass  jfcls=env->GetSuperclass(cls_son);

jmethodID jfomid=env->GetMethodID(jfcls,"drive","()V");

env->CallNonvirtualVoidMethod(son1, jfcls, jfomid,NULL);

std::string hello ="Hello from C++";

return env->NewStringUTF(hello.c_str());

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容