在androidndk,jni开发的过程中我们经常会遇到数组问题,C语言支持指针操作,但是java并不支持指针操作,那么遇到数组问题该如何处理,C语言如何将数组传递到java,让java调用,java如何将数组传递到C语言,让C语言使用呢?方便他人亦是方便自己,如果觉得还行就点下右边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!
工具/原料
Windows 8.1 x64
jdk1.8.0_20
adt-bundle-windows-x86_64-20140702
android-ndk-r10c
生成函数
1、jni提供的主要的数组类型有,如下类型:
2、创建一个jniArray工程,并在MainActivity中添加如下 native方法,如下图所示:
3、配置java的参数
4、通过javah生成对应的C语言层.h文件:
用法实例
1、有所的例子都是通过1、java层传入一个数组;2、C语言层创建一个同样大小的数组;3、将java层数组的类容,复制到C语言层数组中;
2、object[]与 jobjectArray的例子如下图所示:
3、boolean[]与 jbooleanArray的例子如下图所示:
4、当然也可以通过GetBooleanArrayRegion函数来获取数组对应内存数据的副本,然后通过SetBooleanArrayRegion函数将修改后的数据设置进去;从而达到修改数据的内存数据的目的;
5、byte,char, short,int, long,float,double的用法跟boolean的用法一致
6、但是需要注意的是,java和C语言虽然有些类型的名字一致,但是他们的实际情况差距很大,如下图所示:jbyte对应的是signed char;jchar对应的是 unsigned short;jlong对应的是 long long;
7、 方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!