JNIEnv是指向可用JNI函数表的接口指针,原生代码通过JNIEnv接口指针提供的各种函数来使用虚拟机的功能。JNIEnv是一个指向线程-局部数据的指针,而线程-局部数据中包含指向线程表的指针。实现原生方法的函数将JNIEnv接口指针作为它们的第一个参数。

原生代码是C以及原生代码是C++其调用JNI函数的语法不同,C代码中,JNIEnv是指向JNINativeInterface结构的指针,为了访问任何一个JNI函数,该指针需要首先被解引用。因为C代码中的JNI函数不了解当前的JNI环境,JNIEnv实例应该作为第一个参数传递给每一个JNI函数调用者。

jstring Java_com_example_jni_MainActivity_stringFromC(JNIEnv* env,jobject thiz){return (*env)->NewStringUTF(env,"hello, I am from C");
}

然而,在C++代码中,JNIEnv实际上是C++类实例,JNI函数以成员函数形式存在,因为JNI方法已经访问了当前的JNI环境,因此JNI方法调用不要求JNIEnv实例作参数,在C++中,完成同样的功能代码应该是下面这样:

extern "C" jstring Java_com_example_jni_MainActivity_stringFromCpp(JNIEnv* env,jobject thiz){return env->NewStringUTF("hello, I am from C++");
}

Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF相关推荐

  1. ndk中杀线程的办法

    不提倡强制杀死线程,当我们的一个线程获取了一个锁,正在访问某个共享方法的时候,还没来得及解锁就被干掉了,那这个锁就永远不会被解掉了,于是所有依赖这个锁的其它线程可能就锁死了. android的ndk中 ...

  2. android -------- 解决NDK开发中的 Method 'NewStringUTF' could not be resolved

    创建NDK项目时, .cpp文件中出现错误, Method 'NewStringUTF' could not be resolved 如图: 网上看了很多解决方式 项目右键->属性->c/ ...

  3. 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

    文章目录 I . 创建 NDK 项目 II . NDK 项目 相关配置 III . NDK 中获取 Android 版本号 IV . 使用 __system_property_get 可获取的参数 I ...

  4. 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写

     1  案例场景,通过C语言回调Java的代码,案例的最终界面: 2  案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallbac ...

  5. 在Android NDK中使用OpenSSL

    从 6.0 开始,Google 要求不要使用系统的 OpenSSL,请见:https://developer.android.com....因此,请不要再使用本文介绍的方法,请自行交叉编译 OpenS ...

  6. c if标签怎么用android,android – 使用NDK将YUV解码为C/C++中的RGB

    我正在尝试将Android相机Feed转换为位图以进行图像处理. 我有一些代码可以在原生java中将YUV转换为RGB,但是,这个过程对于实时视频来说不够快,所以我认为在应用过滤器之前我需要在C或C中 ...

  7. android数据库sqlite3,android NDK中sqlite3数据库的使用

    工做须要使用数据库进行大量的插入工做,故此想经过使用c进行这部分工做,通过查资料,发现一篇文章比较实用: 方法1.使用源码sqlite3.h,sqlite3.c进行编译. 方法2.使用android编 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )

    文章目录 一.系统调用 二.Android NDK 中的系统调用示例 一.系统调用 在 " 用户层 " , 运行的都是用户应用程序 ; 用户层 下面 是 驱动层 , 驱动层 下面是 ...

  9. android ndk使用c 11,使用c 11 std :: async在android ndk中使用不完整类型无效

    我尝试使用以下函数来检查android ndk中是否支持std :: async以及windows中的cygwin.我使用的功能如下 机器:64位赢得8与cygwin Eclipse:Juno 4.2 ...

最新文章

  1. 云的普及难易,云计算普及的难易
  2. 自适应/响应式网页设计
  3. 866. 试除法判定质数
  4. 为什么Nginx的性能要比Apache高得多?
  5. Python HTTP Error 403: Forbidden
  6. python深度学习库keras——各类网络层
  7. 大众点评运维架构详大揭秘!
  8. 服务器密码过期了咋修改,重置已过期的密码 (Sun Java System Directory Server Enterprise Edition 6.3 管理指南)...
  9. IE浏览器GET请求中文乱码
  10. Windows Server 2008 终端服务授权激活-离线
  11. html颜色渐变配色方案,css网站推荐 渐变色配色方案 - 小俊学习网
  12. 玩转NVIDIA Jetson AGX Xavier(1)--- jetson是什么
  13. modprobe 及 配置文件 /etc/modprobe.conf
  14. Oracle安装 卸载干净文档
  15. HTML5和CSS3 介绍开发实战需要的(二)
  16. 枕头的高度影响颈椎健康
  17. 博客管理系统-软件测试分析报告
  18. 弗吉尼亚理工计算机科学排名,弗吉尼亚理工大学计算机科学硕士排名第46(2020年TFE Times排名)...
  19. ABP官方文档(四十九)【集成EntityFramework】
  20. 玩转“Redis轻量级数据库”之入门(上)

热门文章

  1. 志愿者招募 | 2021 .NET Conf China
  2. 云原生 | 阿里巴巴的Dapr实践与探索
  3. 程序员过关斩将--少年派登录安全的奇幻遐想
  4. Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦
  5. Enumerable 下又有新的扩展方法啦,快来一睹为快吧
  6. ASP.NET Core中的内存缓存
  7. HAProxy 2.0发布,长期支持版本
  8. .Net Core实现的文档数据库RavenDb
  9. .net core i上 K8S(五).netcore程序的hostip模式
  10. Dotnet Core Windows Service