JNI快速查询

作者: miaoyongjun | 来源:发表于2017-06-27 21:20 被阅读26次

JNI快速查询

Jobject 对象 引用类型

Java类型 本地类型(JNI) 描述
boolean(布尔型) jboolean 无符号8个比特
byte(字节型) jbyte 有符号8个比特
char(字符型) jchar 无符号16个比特
short(短整型) jshort 有符号16个比特
int(整型) jint 有符号32个比特
long(长整型) jlong 有符号64个比特
float(浮点型) jfloat 32个比特
double(双精度浮点型) jdouble 64个比特
void(空型) void N/A

函数操作

函数 Java 数组类型 本地类型 说明
GetBooleanArrayElements jbooleanArray jboolean ReleaseBooleanArrayElements 释放
GetByteArrayElements jbyteArray jbyte ReleaseByteArrayElements 释放
GetCharArrayElements jcharArray jchar ReleaseShortArrayElements 释放
GetShortArrayElements jshortArray jshort ReleaseBooleanArrayElements 释放
GetIntArrayElements jintArray jint ReleaseIntArrayElements 释放
GetLongArrayElements jlongArray jlong ReleaseLongArrayElements 释放
GetFloatArrayElements jfloatArray jfloat ReleaseFloatArrayElements 释放
GetDoubleArrayElements jdoubleArray jdouble ReleaseDoubleArrayElements 释放
GetObjectArrayElement 自定义对象 object
SetObjectArrayElement 自定义对象 object
GetArrayLength 获取数组大小
New<Type>Array 创建一个指定长度的原始数据类型的数组
GetPrimitiveArrayCritical 得到指向原始数据类型内容的指针,该方法可能使垃圾回收不能执行,该方法可能返回数组的拷贝,因此必须释放此资源。
ReleasePrimitiveArrayCritical 释放指向原始数据类型内容的指针,该方法可能使垃圾回收不能执行,该方法可能返回数组的拷贝,因此必须释放此资源。
NewStringUTF jstring类型的方法转换
GetStringUTFChars jstring类型的方法转换
DefineClass 从原始类数据的缓冲区中加载类
FindClass 该函数用于加载本地定义的类。它将搜索由CLASSPATH 环境变量为具有指定名称的类所指定的目录和 zip文件
GetObjectClass 通过对象获取这个类。该函数比较简单,唯一注意的是对象不能为NULL,否则获取的class肯定返回也为NULL
GetSuperclass 获取父类或者说超类 。 如果 clazz 代表类class而非类 object,则该函数返回由 clazz 所指定的类的超类。 如果 clazz指定类 object 或代表某个接口,则该函数返回NULL
IsAssignableFrom 确定 clazz1 的对象是否可安全地强制转换为clazz2
Throw 抛出 java.lang.Throwable 对象
ThrowNew 利用指定类的消息(由 message 指定)构造异常对象并抛出该异常
ExceptionOccurred 确定是否某个异常正被抛出。在平台相关代码调用 ExceptionClear() 或 Java 代码处理该异常前,异常将始终保持抛出状态
ExceptionDescribe 将异常及堆栈的回溯输出到系统错误报告信道(例如 stderr)。该例程可便利调试操作
ExceptionClear 清除当前抛出的任何异常。如果当前无异常,则此例程不产生任何效果
FatalError 抛出致命错误并且不希望虚拟机进行修复。该函数无返回值
NewGlobalRef 创建 obj 参数所引用对象的新全局引用。obj 参数既可以是全局引用,也可以是局部引用。全局引用通过调用DeleteGlobalRef() 来显式撤消。
DeleteGlobalRef 删除 globalRef 所指向的全局引用
DeleteLocalRef 删除 localRef所指向的局部引用
AllocObject 分配新 Java 对象而不调用该对象的任何构造函数。返回该对象的引用。clazz 参数务必不要引用数组类。
getObjectClass 返回对象的类
IsSameObject 测试两个引用是否引用同一 Java 对象
NewString 利用 Unicode 字符数组构造新的 java.lang.String 对象
GetStringLength 返回 Java 字符串的长度(Unicode 字符数)
GetStringChars 返回指向字符串的 Unicode 字符数组的指针。该指针在调用 ReleaseStringchars() 前一直有效
ReleaseStringChars 通知虚拟机平台相关代码无需再访问 chars。参数chars 是一个指针,可通过 GetStringChars() 从 string 获得
NewStringUTF 利用 UTF-8 字符数组构造新 java.lang.String 对象
GetStringUTFLength 以字节为单位返回字符串的 UTF-8 长度
GetStringUTFChars 返回指向字符串的 UTF-8 字符数组的指针。该数组在被ReleaseStringUTFChars() 释放前将一直有效
ReleaseStringUTFChars 通知虚拟机平台相关代码无需再访问 utf。utf 参数是一个指针,可利用 GetStringUTFChars() 获得
NewObjectArray 构造新的数组,它将保存类 elementClass 中的对象。所有元素初始值均设为 initialElement
Set<PrimitiveType>ArrayRegion 将基本类型数组的某一区域从缓冲区中复制回来的一组函数
GetFieldID 返回类的实例(非静态)域的属性 ID。该域由其名称及签名指定。访问器函数的Get<type>Field 及 Set<type>Field系列使用域 ID 检索对象域。GetFieldID() 不能用于获取数组的长度域。应使用GetArrayLength()。
Get<type>Field 该访问器例程系列返回对象的实例(非静态)域的值。要访问的域由通过调用GetFieldID() 而得到的域 ID 指定。
Set<type>Field 该访问器例程系列设置对象的实例(非静态)属性的值。要访问的属性由通过调用SetFieldID() 而得到的属性 ID指定。
GetStaticFieldID GetStatic<type>FieldSetStatic<type>Field 同上,只不过是静态属性。
GetMethodID 返回类或接口实例(非静态)方法的方法 ID。方法可在某个 clazz 的超类中定义,也可从 clazz 继承。该方法由其名称和签名决定。 GetMethodID() 可使未初始化的类初始化。要获得构造函数的方法 ID,应将<init> 作为方法名,同时将void (V) 作为返回类型。
CallVoidMethod 调用返回值为空的方法
CallObjectMethod
CallBooleanMethod
CallByteMethod
CallCharMethod
CallShortMethod
CallIntMethod
CallLongMethod
CallFloatMethod
CallDoubleMethod
GetStaticMethodID 调用静态方法
Call<type>Method
RegisterNatives 向 clazz 参数指定的类注册本地方法。methods 参数将指定 JNINativeMethod 结构的数组,其中包含本地方法的名称、签名和函数指针。nMethods 参数将指定数组中的本地方法数。
UnregisterNatives 取消注册类的本地方法。类将返回到链接或注册了本地方法函数前的状态。该函数不应在常规平台相关代码中使用。相反,它可以为某些程序提供一种重新加载和重新链接本地库的途径。

域描述符

Java 语言
Z boolean
B byte
C char
S short
I int
J long
F float
D double

GNU Make系统变量

变量 描述
CLEAR_VARS 指向一个编译脚本,几乎所有未定义的 LOCAL_XXX 变量都在"Module-description"节中列出。必须在开始一个新模块之前包含这个脚本:include$(CLEAR_VARS),用于重置除LOCAL_PATH变量外的,所有LOCAL_XXX系列变量。
BUILD_SHARED_LIBRARY 指向编译脚本,根据所有的在 LOCAL_XXX 变量把列出的源代码文件编译成一个共享库。
BUILD_STATIC_LIBRARY 一个 BUILD_SHARED_LIBRARY 变量用于编译一个静态库。静态库不会复制到的APK包中,但是能够用于编译共享库。
TARGET_ARCH 目标 CPU平台的名字, 和 android 开放源码中指定的那样。如果是arm,表示要生成 ARM 兼容的指令,与 CPU架构的修订版无关。
TARGET_PLATFORM Android.mk 解析的时候,目标 Android 平台的名字.详情可参考/development/ndk/docs/stable- apis.txt.
TARGET_ARCH_ABI 支持目标平台
TARGET_ABI 目标平台和 ABI 的组合,它事实上被定义成$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI) ,在想要在真实的设备中针对一个特别的目标系统进行测试时,会有用。在默认的情况下,它会是'android-3-arm'。

模块描述变量

变量 描述
LOCAL_PATH 这个变量用于给出当前文件的路径。必须在 Android.mk 的开头定义,可以这样使用:LOCAL_PATH := $(call my-dir) 这个变量不会被$(CLEAR_VARS)清除,因此每个 Android.mk 只需要定义一次(即使在一个文件中定义了几个模块的情况下)。
LOCAL_MODULE 这是模块的名字,它必须是唯一的,而且不能包含空格。必须在包含任一的$(BUILD_XXXX)脚本之前定义它。模块的名字决定了生成文件的名字。例如,如果一个一个共享库模块的名字是,那么生成文件的名字就是 lib.so。但是,在的 NDK 生成文件中(或者 Android.mk 或者 Application.mk),应该只涉及(引用)有正常名字的其他模块。
LOCAL_SRC_FILES 这是要编译的源代码文件列表。只要列出要传递给编译器的文件,因为编译系统自动计算依赖。注意源代码文件名称都是相对于 LOCAL_PATH的,你可以使用路径部分。
LOCAL_CPP_EXTENSION 这是一个可选变量, 用来指定C++代码文件的扩展名,默认是'.cpp',但是可以改变它。
LOCAL_C_INCLUDES 可选变量,表示头文件的搜索路径。
LOCAL_CFLAGS 可选的编译器选项,在编译 C 代码文件的时候使用。
LOCAL_CXXFLAGS 与 LOCAL_CFLAGS同理,针对 C++源文件。
LOCAL_CPPFLAGS 与 LOCAL_CFLAGS同理,但是对 C 和 C++ source files都适用。
LOCAL_STATIC_LIBRARIES 表示该模块需要使用哪些静态库,以便在编译时进行链接。
LOCAL_SHARED_LIBRARIES 表示模块在运行时要依赖的共享库(动态库),在链接时就需要,以便在生成文件时嵌入其相应的信息。注意:它不会附加列出的模块到编译图,也就是仍然需要在Application.mk 中把它们添加到程序要求的模块中。
LOCAL_LDLIBS 编译模块时要使用的附加的链接器选项。这对于使用‘-l’前缀传递指定库的名字是有用的。
LOCAL_ALLOW_UNDEFINED_SYMBOLS 默认情况下, 在试图编译一个共享库时,任何未定义的引用将导致一个“未定义的符号”错误。
LOCAL_ARM_MODE 默认情况下, arm目标二进制会以 thumb 的形式生成(16 位),你可以通过设置这个变量为 arm如果你希望你的 module 是以 32 位指令的形式。
LOCAL_MODULE_PATH 和 LOCAL_UNSTRIPPED_PATH 在 Android.mk 文件中, 还可以用LOCAL_MODULE_PATH 和LOCAL_UNSTRIPPED_PATH指定最后的目标安装路径.不同的文件系统路径用以下的宏进行选择: TARGET_ROOT_OUT:表示根文件系统。 TARGET_OUT:表示 system文件系统。 TARGET_OUT_DATA:表示 data文件系统。用法如:LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT) 至于LOCAL_MODULE_PATH 和LOCAL_UNSTRIPPED_PATH的区别,暂时还不清楚。

GNU Make 功能宏

变量 描述
my-dir 返回当前 Android.mk 所在的目录的路径,相对于 NDK 编译系统的顶层。
all-subdir-makefiles 返回一个位于当前'my-dir'路径的子目录中的所有Android.mk的列表。
this-makefile 返回当前Makefile 的路径(即这个函数调用的地方)
parent-makefile 返回调用树中父 Makefile 路径。即包含当前Makefile的Makefile 路径。
grand-parent-makefile 返回调用树中父Makefile的父Makefile的路径

Application.mk(AS2.2以上使用cmake替代)

变量 描述
APP_PROJECT_PATH 这个变量是强制性的,并且会给出应用程序工程的根目录的一个绝对路径。
APP_MODULES 这个变量是可选的,如果没有定义,NDK将由在Android.mk中声明的默认的模块编译,并且包含所有的子文件(makefile文件)如果APP_MODULES定义了,它不许是一个空格分隔的模块列表,这个模块名字被定义在Android.mk文件中的LOCAL_MODULE中。
APP_OPTIM 这个变量是可选的,用来义“release”或"debug"。在编译您的应用程序模块的时候,可以用来改变优先级。
APP_CFLAGS 当编译模块中有任何C文件或者C++文件的时候,C编译器的信号就会被发出。
APP_CXXFLAGS APP_CPPFLAGS的别名,已经考虑在将在未来的版本中废除了
APP_CPPFLAGS 当编译的只有C++源文件的时候,可以通过这个C++编译器来设置
APP_BUILD_SCRIPT 默认情况下,NDK编译系统会在$(APP_PROJECT_PATH)/jni目录下寻找名为Android.mk文件:$(APP_PROJECT_PATH)/jni/Android.mk
APP_ABI 默认情况下,NDK的编译系统回味"armeabi"ABI生成机器代码。
APP_STL 默认情况下,NDK的编译系统为最小的C++运行时库(/system/lib/libstdc++.so)提供C++头文件。然而,NDK的C++的实现,可以让你使用或着链接在自己的应用程序中。例如:APP_STL := stlport_static --> static STLport libraryAPP_STL := stlport_shared --> shared STLport libraryAPP_STL := system --> default C++ runtime library

中文JNI API:http://www.ceeger.com/Script/AndroidJNI/AndroidJNI.html

参考文章:http://blog.csdn.net/banketree/article/details/40535325

相关文章

  • JNI快速查询

    JNI快速查询 Jobject 对象 引用类型 函数操作 域描述符 GNU Make系统变量 模块描述变量 GN...

  • JNI

    Android JNI编程—JNI基础 一天掌握Android JNI本地编程 快速入门 Android深入理解J...

  • cmake快速实战

    目录 cmake快速实战 Android JNI基础知识讲解 Android JNI实战 makefile前言 我...

  • JNI实现1+1

    一、 jni环境搭建 借助Android Studio可以快速构建支持jni的项目。 New Project 选择...

  • JNI基础知识讲解

    目录 cmake快速实战 Android JNI基础知识讲解 Android JNI实战 1、序言 学习ndk,就...

  • ndk08_JNI数组(快速排序),引用,异常处理,缓存策略

    一、JNI访问java数组 1.JNI访问数组并使用qsort快速排序 JNIEXPORT void JNICA...

  • Android JNI实战用法

    目录 cmake快速实战 Android JNI基础知识讲解 Android JNI实战 1、前言 对于程序员来讲...

  • JNI快速学习

    JNI是JVM中的一部分,它的存在就是为了打通java和native模块的桥梁。刚接触的时候会遇到一堆陌生的api...

  • jni基本语法

    所有有关API可以在JNI的官网API查询 http://docs.oracle.com/javase/8/doc...

  • Android NDK开发小技巧

    目录 快速生成JNI头文件 打开Android Studio:File->Settings->External T...

网友评论

    本文标题:JNI快速查询

    本文链接:https://www.haomeiwen.com/subject/sifycxtx.html