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









网友评论