当前位置: 首页 > news >正文

网站建设 万网 域名搜狗收录提交

网站建设 万网 域名,搜狗收录提交,做网站上传图片多大合适,企业名称怎么取名JNI的两种注册机制:静态注册和动态注册. 一、JNI介绍 JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C机型交互. 方式: 静态注册动态注册:需要提供Java中…

JNI的两种注册机制:静态注册和动态注册.

一、JNI介绍

JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native
语言的一种特性。通过JNI可以使得Java与C/C++机型交互.

方式

  • 静态注册
  • 动态注册:需要提供Java中Native方法的方法签名和Native层中对应的实现函数。

二、静态注册

要求C/C++层的函数名符合某种特定的要求:包含Java中Native方法的目录信息和方法名。

Example
Java

package cn.com.codingce.ndkpractice;public native String stringFromJNI();

C++

extern "C"
JNIEXPORT jstring JNICALL
Java_cn_com_codingce_ndkpractice_MainActivity_stringFromJNI(JNIEnv *env, jobject thiz) {std::string hello = "Hello from C++";//crashTest();return env->NewStringUTF(hello.c_str());
}

按照以上规则进行命名,在调用到Native的方法时,JVM会去查找是否存在对应函数名的函数,以此实现静态注册。

三、动态注册

动态注册相对于静态注册,优点是不再根据特定路径查找函数的实现,带来两个好处:

  • 没有了冗杂的函数名,适用于大型项目开发。
  • 由于不再根据Native函数查找对应的JNI层函数,所以首次调用速度比静态注册快。

开发者需要自行提供Java层和C/C++层中的映射关系。
一种可行的方法是基于JNI重载JNI_OnLoad(),在其中对函数进行动态注册。

Example
Java

package cn.com.codingce.ndkpractice.utils;public static native void logInit(String logFilePath, String logName, int logfileLevel, int logScreenLevel);

C++

此步骤涉及到如何获取Java函数。

static JNINativeMethod nativeUtilsMethods[] = {{"logInit",  "(Ljava/lang/String;Ljava/lang/String;II)V", (void *) localLogInit},{"logJni",   "(ILjava/lang/String;)V",                    (void *) logJni},{"logClose", "()V",                                       (void *) logClose},
};static void nativeLogUtilsRegisterNatives(JNIEnv *jniEnv) {if (jniEnv == nullptr) {return;}jclass clazz = nullptr;do {clazz = jniEnv->FindClass("cn/com/codingce/ndkpractice/utils/LogUtils");if (clazz == nullptr) {diagnosis_assert(!"FindClass LogUtils error!");break;}if (jniEnv->RegisterNatives(clazz, nativeUtilsMethods,std::extent<decltype(nativeUtilsMethods)>::value) != 0) {diagnosis_assert(!"RegisterNatives error!");break;}} while (false);if (jniEnv->ExceptionCheck() == JNI_TRUE) {jniEnv->ExceptionClear();}if (clazz != nullptr) {jniEnv->DeleteLocalRef(clazz);}
}

重载JNI_OnLoad函数,并在其中调用nativeLogUtilsRegisterNatives函数

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {JNIEnv *jniEnv{nullptr};if (vm->GetEnv((void **) &jniEnv, JNI_VERSION_1_6) != JNI_OK) {diagnosis_assert(!"JNI version error!");return JNI_EVERSION;}nativeLogUtilsRegisterNatives(jniEnv);return JNI_VERSION_1_6;
}
http://www.shuangfujiaoyu.com/news/56868.html

相关文章:

  • 网站备案完电信搜索引擎优化的简写是
  • 网站开发常见模块网络营销的主要方式和技巧
  • 天津企业建站程序怎么创建自己的免费网址
  • 亚马逊外贸网站如何做关键词林俊杰百度云
  • 逼格高的网站海外社交媒体营销
  • 网站制作的重要流程线上运营推广
  • 网站的空间域名广告推广图片
  • 微商城分销系统设计|分销电商系统app软件上海网站营销seo方案
  • 如何在人力资源网站做合同续签网站群发推广软件
  • wordpress主题付费百度优化关键词
  • 北京丰台做网站长沙网络推广只选智投未来
  • 沙井做网站发布软文
  • 人个做外贸用什么网站好ios aso优化工具
  • 5000元网站seo推广seoul什么意思
  • 北京网站建设套餐seo课程培训视频
  • 打好代码怎么做网站合肥百度关键词推广
  • 招聘网站开发源代码品牌推广文案
  • 北京网站建设方案免费网站或软件
  • 建一个网站得多少钱seo简单优化操作步骤
  • 麦当劳的网站优化建议大数据免费查询平台
  • 微信小程序传奇怎么制作app优化
  • 电商网站增加客户爱站工具网
  • 广东建设监理协会网站个人账号网站制作郑州
  • 做网站要审批吗百度文库网页版登录入口
  • 域名申请哪个网站好搜索引擎优化简历
  • 网站做淘宝客指数
  • 今科网站建设公司百度网站下载
  • 工业设计公司怎么收费seo怎么才能做好
  • qq网页版在线登录入口搜索引擎优化的方法有哪些
  • 做卡盟网站赚钱吗友情链接源码