jobject和jclass】的更多相关文章

jclass和jobject的迷惑第一次使用JNI,实例引用(jobject)和类引用(jclass)让人觉得很困惑.实例引用与一个数组和java.lang.Object类或它的子类的实例对应.类引用与java.lang.Class实例对应,它代表着类的类型.一个操作如GetFieldID,需要参数jclass,是一个类操作,因为它从一个类中获得field的描述.与此相反,GetIntField需要参数jobject,这是一个实例操作,因为它从这个实例中获得这个field的值.在所有的JNI方法…
JNI Tips In this document JavaVM and JNIEnv Threads jclass, jmethodID, and jfieldID Local and Global References UTF-8 and UTF-16 Strings Primitive Arrays Region Calls Exceptions Extended Checking Native Libraries 64-bit Considerations Unsupported Fea…
@Dlive 0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强. JNI在Android中起着连接Java和C/C++层的作用,现在APP的许多重要的逻辑,算法以及和底层的交互功能都是通过JNI调用C/C++来实现. 简单来说,JNI提供了一种可以让Java代码调用C/C++代码的接口. 0x02 JNI中的类型/数据结构 JNI的类型/数据结构,以及函…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 前面我们学习了如何在JNI中通过参数来使用Java中的普通变量,下面我们来学习如何在JNI中使用Java类的普通方法与成员变量:Java中类有两个区域:每个类的实例的私有区域和所有实例共享的类的静态区域,JNI也提供了相应的方法来操作这两个区域中的方法与变量.首先以一个简单例子来说明如何在JNI中操作类实例的私有区域: 1 变量的操作 1.1 类实例的…
简介 前面写了几篇NDK相关的文章: NDK开发-简介&环境搭建(Eclipse,Android Studio) NDK开发-Android Studio+gradle-experimental开发NDK, NDK开发-零散知识点整理 这个demo就是对这几篇文章中涉及内容的一个应用.其功能只是对数组进行排序.如果单纯使用Java来做十分简单,只需写个排序方法,或者将数组转化为集合,然后调用sort函数就ok了. 但我们的目的是练习JNI所以需要使劲的折腾一下,其中主要涉及了: Java调用JN…
JavaVM 标准Java平台下,每一个Process可以产生很多JavaVM对象,但在Android平台上,每一个Process只能产生一个Dalvik VM对象,也就是说在Android进程中是通过一个虚拟器对象来服务所有Java和c/c++代码. JavaVM使用 在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数).第一个参数会传入JavaVM指针. 在native code中调用JNI_CreateJav…
文章地址  http://developer.android.com/training/articles/perf-jni.html JNI Tips JNI is the Java Native Interface. It defines a way for managed code (written in the Java programming language) to interact with native code (written in C/C++). It's vendor-ne…
一.NDK中获取android设备ID的方式 Java代码如下(获取设备ANDROID_ID): final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); 对应的c代码(相当蛋疼),注意如果是C++,需要把所有的(*env)->替换成env->,同时去掉第一个参数env char * get_android_id(JNIEnv *env, jobject mContex…
声明 设计概述 JNI接口函数和指针 加载和链接本地方法 解析本地方法名 本地方法的参数 引用Java对象 全局和局部引用 实现局部引用 访问Java对象 访问基本类型数组 访问域和方法 报告编程错误 Java异常 异常和错误代码 异步异常 异常的处理 JNI的类型和数据结构 基本类型 引用类型 域ID和方法ID 值类型 类型签名 UTF-8字符串 JNI函数 接口函数表 版本信息 调用实例方法 CalltypeMethod例程 CalltypeMethodA例程 CalltypeMethodV…
1.关于JNIEnv和JavaVM JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程都可以使用这个JavaVM.当后台线程需要调用JNI native时,在native库中使用全局变量保存JavaVM尤为重要,这样使得后台线程能通过JavaVM获得JNIEnv. native程序中频繁使用JNIEnv*和JavaVM*.而C和C++代码使用JNIEnv*和JavaVM*这两个指针…