在android ndk,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
生成函式
jni提供的主要的陣列型別有,如下型別:
建立一個jniArray工程,並在MainActivity中新增如下 native 方法,如下圖所示:
配置java的引數
通過javah生成對應的C語言層.h檔案:
用法例項
有所的例子都是通過
1、java層傳入一個數組;
2、C語言層建立一個同樣大小的陣列;
3、將java層陣列的類容,複製到C語言層陣列中;
object[] 與 jobjectArray 的例子如下圖所示:
boolean[] 與 jbooleanArray 的例子如下圖所示:
當然也可以通過
GetBooleanArrayRegion 函式來獲取陣列對應記憶體資料的副本,然後通過
SetBooleanArrayRegion 函式將修改後的資料設定進去;從而達到修改資料的記憶體資料的目的;
byte,char, short, int, long, float,double的用法跟boolean的用法一致
但是需要注意的是,java和C語言雖然有些型別的名字一致,但是他們的實際情況差距很大,如下圖所示:
jbyte 對應的是 signed char;
jchar 對應的是 unsigned short;
jlong 對應的是 long long;