NDK是Native Developement Kit的縮寫,顧名思義,NDK是Google提供的一套原生Java代碼與本地C/C++代碼“交互”的開發(fā)工具集。而Android是運行在Dalvik虛擬機之上,支持通過JNI的方式調(diào)用本地C/C++動態(tài)鏈接庫。C/C++有著較高的性能和移植性,通過這種調(diào)用機制就可以實現(xiàn)多平臺開發(fā)、多語言混編的Android應(yīng)用了。當然,這些都是基于JNI實現(xiàn)的。在游戲開發(fā)中,這種需求更是必不可少。

作者:AlphaGL。版權(quán)所有,歡迎保留原文鏈接進行轉(zhuǎn)載 :)

1、認識JNI

JNI是Java Native Interface的縮寫,也稱為Java本地接口。是JVM規(guī)范中的一部分,因此,我們可以將任何實現(xiàn)了JVM規(guī)范的JNI程序在Java虛擬機中運行。這里的本地接口,主要指的是C/C++所現(xiàn)實的接口。因此,也使得我們可以通過這種方式重用C/C++開發(fā)的代碼或模塊。
具體關(guān)于JNI的詳細介紹,可以參見JNI的官方文檔。

Java Native Interface Specification:
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html

2、JNI的類型和數(shù)據(jù)結(jié)構(gòu)

實現(xiàn)原生Java代碼與本地C/C++代碼,一個重要的環(huán)節(jié)是將原生Java的類型和數(shù)據(jù)結(jié)構(gòu)映射成本地C/C++支持的相應(yīng)的類型和數(shù)據(jù)結(jié)構(gòu)。

(1)Java基本數(shù)據(jù)類型與原生C/C++類型對應(yīng)關(guān)系如下:(由于博客編輯器對markdown表格語法支持不友好,所以統(tǒng)一替換為圖片了)

(2)Java引用數(shù)據(jù)類型與原生C/C++類型對應(yīng)關(guān)系如下:(由于博客編輯器對markdown表格語法支持不友好,所以統(tǒng)一替換為圖片了)