JNI 基本工作流程
1. 在java代码中声明一个native的方法.
2. 用javah命令生成 native方法对应的头文件.javah命令需要注意包名和class 所在的目录
3. 在工程中创建一个jni目录,把头文件 拷贝jni目录
4. 创建Android.mk文件.
5. 实现头文件里面未实现的方法.
6. 在工程目录下 使用ndk-build 命令生成库文件. 生成的这个库文件如果是静态库是一个.a的文件.
.a文件的文件需要拷贝到平台下E:\android-ndk-cpp\build\platforms\android-8\arch-arm\usr\lib
如果是动态库是一个.so的文件. 我们的adt 会通过aapt 把文件打包到apk里面 . 程序在android里面. so文件就在data/data/包名下/lib
注意: eclipse 会缓存文件,所以重新编译库文件的时候需要把工程给clean一下.
生成一个方法的签名需要调用 javap -s 这个命令| Java类型 | 本地类型 | 描述 |
| boolean | jboolean | C/C++8位整型 |
| byte | jbyte | C/C++带符号的8位整型 |
| char | jchar | C/C++无符号的16位整型 |
| short | jshort | C/C++带符号的16位整型 |
| int | jint | C/C++带符号的32位整型 |
| long | jlong | C/C++带符号的64位整型e |
| float | jfloat | C/C++32位浮点型 |
| double | jdouble | C/C++64位浮点型 |
| Object | jobject | 任何Java对象,或者没有对应java类型的对象 |
| Class | jclass | Class对象 |
| String | jstring | 字符串对象 |
| Object[] | jobjectArray | 任何对象的数组 |
| boolean[] | jbooleanArray | 布尔型数组 |
| byte[] | jbyteArray | 比特型数组 |
| char[] | jcharArray | 字符型数组 |
| short[] | jshortArray | 短整型数组 |
| int[] | jintArray | 整型数组 |
| long[] | jlongArray | 长整型数组 |
| float[] | jfloatArray | 浮点型数组 |
| double[] | jdoubleArray | 双浮点型数组 |
※ JNI类型映射
| 函数 | Java数组类型 | 本地类型 |
| GetBooleanArrayElements | jbooleanArray | jboolean |
| GetByteArrayElements | jbyteArray | jbyte |
| GetCharArrayElements | jcharArray | jchar |
| GetShortArrayElements | jshortArray | jshort |
| GetIntArrayElements | jintArray | jint |
| GetLongArrayElements | jlongArray | jlong |
| GetFloatArrayElements | jfloatArray | jfloat |
| GetDoubleArrayElements | jdoubleArray | jdouble |
JNI数组存取函数
本文详细介绍了JNI的基本工作流程,包括在Java代码中声明native方法、使用javah命令生成头文件、创建Android.mk文件、实现未实现的方法、生成库文件等步骤。同时,文章还提供了JNI类型映射,包括Java类型与本地类型之间的转换函数,如GetBooleanArrayElements、GetByteArrayElements等,帮助开发者更高效地进行跨语言调用。
230

被折叠的 条评论
为什么被折叠?



