JNI開發(fā)系列(四、JNI原理篇)

進去正題前,我們先來看下JVM的工作原理,或者說Java代碼的執(zhí)行步驟,如下圖:

Java源文件(.java文件)是如何一步步執(zhí)行的,如上圖所示,首先Java源文件經(jīng)過Java編譯器(javac或ECJ)將.java文件編譯為Java字節(jié)碼文件,然后JRE加載Java字節(jié)碼文件,載入系統(tǒng)分配給JVM的內(nèi)存區(qū),然后執(zhí)行引擎解釋或編譯類文件,再由即時編譯器將字節(jié)碼轉(zhuǎn)化為機器碼。從而達到在機器上能夠運行。

JNI(Java Native Interface)是 java 與 C/C++ 進行通信的一種技術(shù)。眾所周知,Java語言是跨平臺的語言,而這跨平臺的背后都是依靠Java虛擬機,虛擬機采用C/C++編寫,適配各個系統(tǒng),通過JNI為上層Java提供各種服務(wù),保證跨平臺性。Android 中的 Framework 層與 Native 層就是采用的JNI技術(shù)。

我們知道, Android 系統(tǒng)是基于 Linux開發(fā),采用的是 Linu x內(nèi)核。 Android APP 開發(fā)大部分也要和系統(tǒng)打交道,只是 Android FrameWork 幫我們處理了和系統(tǒng)相關(guān)的操作。我們從Android 系統(tǒng)的分成結(jié)構(gòu)可以看出,Android FrameWork 是通過JNI與底層的C/C++庫交互,例如:FreeType,OpenGL,SQLite,音視頻……

如果程序需要調(diào)用自己的C/C++函數(shù)庫,就必須用到JNI/NDK開發(fā)。

Java代碼調(diào)用C代碼

C代碼調(diào)用Java代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容