android native call java_android NDK 四、 Java call Native And Native call Java
发布日期:2022-02-03 04:38:27 浏览次数:13 分类:技术文章

本文共 2411 字,大约阅读时间需要 8 分钟。

#include #include#include#include

#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))

#define LOGII(...) ((void)__android_log_print(ANDROID_LOG_INFO, "the int value is : %d", __VA_ARGS__))JNIEXPORTvoidJNICALL

Java_com_ndk_NDKFirstActivity_acessField(JNIEnv*env , jobject obj)

{

jfieldID fid;

jstring jstr;const char*str;/**从对象中回去类*/jclass cls= (*env)->GetObjectClass(env ,obj);/**根据类、字段、和字段类型获取字段id*/fid= (*env)->GetFieldID(env ,cls,"str" ,"Ljava/lang/String;");//类型后面的分号不能省略

if(fid ==NULL)

{return;

}/**根据字段ID 和对象 获取值*/jstr= (*env)->GetObjectField(env ,obj,fid);

str= (*env)->GetStringUTFChars(env ,jstr ,NULL);if(str ==NULL)

{return;

}

LOGI(str);

(*env)->ReleaseStringUTFChars(env ,jstr,str);

jstr= (*env)->NewStringUTF(env ,"I reset the str value in native c,and success");if(jstr ==NULL)

{return;

}/**根据对象、字段id 设置值*/(*env)->SetObjectField(env ,obj , fid , jstr);

}

JNIEXPORTvoidJNICALL

Java_com_ndk_NDKFirstActivity_accessStaticField(JNIEnv*env ,jobject obj)

{

jfieldID fid ;

jint si;

jclass cls= (*env)->GetObjectClass(env , obj);

fid= (*env)->GetStaticFieldID(env ,cls ,"value","I");if(fid==NULL)

{return;

}

//根据类,设置静态字段值

si= (*env)->GetStaticIntField(env ,cls ,fid);//LOGI(si+"");

(*env)->SetStaticIntField(env ,cls ,fid ,2012);

}

JNIEXPORTvoidJNICALL

Java_com_ndk_NDKFirstActivity_invokeMethod(JNIEnv*env ,jobject obj)

{

jclass cls= (*env)->GetObjectClass(env ,obj);

jmethodID mid= (*env)->GetMethodID(env ,cls ,"callback","()V");if(mid ==NULL)

{return;

}

//更加对象、方法字段,调用 Java 方法

LOGI("i invoke callback in native c");

(*env)->CallVoidMethod(env ,obj ,mid);

}

JNIEXPORTvoidJNICALL

Java_com_ndk_NDKFirstActivity_invokeStaticMethod(JNIEnv*env , jobject obj)

{

jclass cls= (*env)->GetObjectClass(env , obj);

jmethodID mid=(*env)->GetStaticMethodID(env ,cls,"staticCallback","(I)V");if(mid ==NULL)

{return;

}

LOGI("i invoke staticCallback in native c");

jint ji= 1000;

//根据类,方法字段,调用静态方法

(*env)->CallStaticVoidMethod(env,cls,mid ,ji);

}

JNIEXPORT jobject JNICALL

Java_com_ndk_NDKFirstActivity_getData(JNIEnv*env , jobject obj , jint ji)

{

//根据类名,获取类

jclass dataClass= (*env)->FindClass(env ,"com/ndk/Data");if(dataClass ==NULL)

{return;

}

//根据类 获取方法字段

jmethodID cid= (*env)->GetMethodID(env ,dataClass ,"" ,"(I)V");if(cid==NULL)

{return;

}

LOGI("i init and return a construct in native c");

//根据类、 构造方法字段 初始化 类对象return (*env)->NewObject(env ,dataClass ,cid , ji);

}

转载地址:https://blog.csdn.net/weixin_30596151/article/details/114838314 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ccf压缩编码java_CCF CSP 20171204 行车路线 JAVA 100分代码
下一篇:java定义js函数_浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月31日 15时58分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【大话Mysql面试】-Mysql如何恢复数据?如何进行主从复制?Binlog日志到底是什么? 2019-04-26
理解String.intern()和String类常量池疑难解析例子 2019-04-26
python flask打造前后端分离的口罩检测 2019-04-26
【大话Mysql面试】-MySQL基础知识 2019-04-26
【大话Mysql面试】-MySQL数据类型有哪些 2019-04-26
【大话Mysql面试】-MySQL数据引擎 2019-04-26
【大话Mysql面试】-常见SQL语句书写 2019-04-26
【大话Mysql面试】-SQL语句优化 2019-04-26
【大话Mysql面试】-Mysql事务以及隔离级别 2019-04-26
【大话Mysql面试】-Mysql索引 2019-04-26
【大话Mysql面试】-Mysql锁 2019-04-26
【大话Mysql面试】-Mysql常见面试题目 2019-04-26
08 【多线程高并发】Java线程间通信的方式 2019-04-26
【数据结构与算法】什么是跳表?通俗易懂来理解跳表 2019-04-26
【数据结构与算法】什么是图?图是什么?快速带你回顾图有关的知识点 2019-04-26
【数据结构与算法】什么是串?什么是KMP算法?字符串匹配是什么? 2019-04-26
【数据结构与算法】什么是布隆过滤器?如何防止缓存穿透的问题? 2019-04-26
【Java锁体系】CopyOnWriteArrayList是什么?线程安全的arraylist是哪个? 2021-06-29
【面试题目】Java设计模式你有哪些了解?说几个常用的。 2021-06-29
【计算机操作系统】常说的死锁是什么?死锁产生的必要条件是什么?死锁的解决策略是什么? 2021-06-29