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. vs2005打开vs2008
  2. python爬虫实例-Python爬虫原理与python爬虫实例大全
  3. Lib详解--如何判断lib文件是静态库还是导入库
  4. 基金委托管理系统试题
  5. 为什么我要选择erlang+go进行server架构(2)
  6. c语言c判断字符数字,c语言问题求教 利用函数判断字符串中是否全为数字
  7. python入门——P42魔法方法:算数运算1
  8. hdu4746 Mophues
  9. MySQL中的B+树索引结构
  10. Task01:基于逻辑回归的分类预测
  11. 计算机配置很不错但是卡,高手告诉你win10电脑明明配置很好却卡顿的详尽处理手法...
  12. ip address转换
  13. 100个囚犯的脱狱问题
  14. 看书不花钱,直接进网站~~~24个图书网址
  15. OpenSSL 代码问题漏洞(CVE-2020-1971)(CVE-2020-1967)
  16. pgsql设置字段自增
  17. 高新技术企业认定的好处
  18. Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
  19. Linux下清除系统日志方法
  20. pyqt5 新年快乐

热门文章

  1. EF 更新大量的数据时出现重复键错误
  2. .net core 下使用StackExchange的Redis库访问超时解决
  3. 对 Redis 中的有序集合SortedSet的理解
  4. BeetleX之简单HTTP/HTTPS实现
  5. 7.30 KubeCon2020 | 今天下午5:40 近几年最火爆的技术峰会之分享主题.NET开发者与Kuberentes...
  6. Sql Server之旅——第十三站 深入的探讨锁机制
  7. ASP.NET Core分布式项目实战(课程介绍,MVP,瀑布与敏捷)--学习笔记
  8. 运维进化论:微盟“删库跑路”给我们的启示
  9. 2019 中国.NET 开发者峰会正式启动
  10. “自启动”树莓派上的 .NET Core 3.0 环境