JNI(Java Native Interface,java本地接口)是java平臺定義的一套標準的本地編程接口。JNI允許Java代碼與本地代碼互相操作,即Java代碼可以調用本地代碼,本地代碼也可以調用Java代碼。所謂本地代碼指的是其他編程語言(如C/C++)實現的、依賴于特定硬件和操作系統的代碼。通過JNI調用本地代碼,可以實現Java語言所不能實現的功能。在Android平臺上,Dalvik虛擬機會實現JNI定義的接口。
從圖2-1宗可以看出,JNI可以直接調用本地代碼庫,并可以通過Dalvik虛擬機實現與應用層和應用框架層之間的交互。
NDK:(Native Development Kits)NDK是便于開發基于JNI的應用而提供的一套開發和編譯工具集
NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,并能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。
NDK集成了交叉編譯器,并提供了相應的mk文件隔離CPU、平臺、ABI等差異,開發人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so。
NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
JNI:JNI是一套編程接口,可以運用在應用層,也可以運用在應用框架層,以實現java代碼與本地代碼的互相操作。
SDK(Sofware development kit):軟件開發工具包。被軟件開發工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件的開發工具的集合。