android?

在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提供的主要的陣列型別有,如下型別:

android ndk jni 陣列操作

建立一個jniArray工程,並在MainActivity中新增如下 native 方法,如下圖所示:

android ndk jni 陣列操作

配置java的引數

android ndk jni 陣列操作

通過javah生成對應的C語言層.h檔案:

android ndk jni 陣列操作

用法例項

有所的例子都是通過

1、java層傳入一個數組;

2、C語言層建立一個同樣大小的陣列;

3、將java層陣列的類容,複製到C語言層陣列中;

object[] 與 jobjectArray 的例子如下圖所示:

android ndk jni 陣列操作

boolean[] 與 jbooleanArray 的例子如下圖所示:

android ndk jni 陣列操作

當然也可以通過

GetBooleanArrayRegion 函式來獲取陣列對應記憶體資料的副本,然後通過

SetBooleanArrayRegion 函式將修改後的資料設定進去;從而達到修改資料的記憶體資料的目的;

byte,char, short, int, long, float,double的用法跟boolean的用法一致

但是需要注意的是,java和C語言雖然有些型別的名字一致,但是他們的實際情況差距很大,如下圖所示:

jbyte 對應的是 signed char;

jchar 對應的是 unsigned short;

jlong 對應的是 long long;

android ndk jni 陣列操作

問題, 語言, 疑問, 指標, 陣列,
相關問題答案