Android NDK祕籍--初識NDK、JNI、Makefile/CMake

今後篇文章開始介紹Android NDK系列的知識。java

本文目錄:安全

1.NDK是什麼,有何優勢框架

2.JNI是什麼eclipse

3.Makefile和CMake是什麼,有何做用jvm

1.NDK是什麼,有何優勢

NDK(Native Development Kit):函數

1.NDK是原生開發工具包,這套工具容許Android使用C/C++代碼,並提供了衆多的平臺庫。工具

2.Java代碼經過Java原生接口(JNI)框架,調用原生庫中的函數。性能

3.在Android Studio中使用C/C++時,通常須要Makefile或CMake進行配置構建,以及LLDB調試器。開發工具

優勢:gradle

1.性能快,C/C++編譯時的過程是可執行文件到機器碼,java運行的過程是字節碼到jvm虛擬機再到機器碼。

2.安全性高,APK中的java層代碼很容易被反編譯,C/C++庫反編譯比較難。

3.容易移植,不依賴平臺,方便移植到其餘平臺使用。

4.複用性高,早期大多數第三方庫都是用C/C++編寫的,方便使用第三方庫或封裝本身開發的底層源碼。

2.JNI是什麼

JNI(Java Native Interface):

1.JNI是Java本地接口,也就是Java與C/C++相互通訊的接口。

2.NDK開發前須要引入jni.h頭文件,經過一系列的轉換,完成Java與C/C++的互相調用。

3.互相調用時出現最多的是JNIEnv,這個類型表明了Java環境,JNIEnv*指針會被JNI傳入到native方法的實現函數中,經過這個指針能夠對Java端的代碼進行操做,好比獲取Java對象中的屬性並轉換成C/C++中的變量。

3.Makefile和CMake是什麼,有何做用

Makefile和CMake一塊兒介紹的緣由是這兩個編譯工具的做用大體相同,都是爲了將C/C++代碼編譯成原生庫,而後打包到APK中,被Java層調用。

Makefile:

1.Makefile能夠定義項目中庫、模塊、源文件之間的各類依賴關係,也可以定義文件的編譯順序,還能夠定義其餘更復雜的規則,相似於一個腳本。

2.在Android中,Makefile依靠ndk-build腳本編譯工具來完成配置編譯,只須要編寫Android.mk和Application.mk兩個Makefile文件,這種構建方式在eclipse中比較常見。

3.Makefile依賴於編譯平臺,在不一樣的平臺上有不一樣的編譯工具,遵循的規則也不相同,因此在不一樣的平臺上編譯時,須要從新配置Makefile,工做量較大,也容易出錯。

CMake:

1.CMake是一個跨平臺的編譯工具,很好的解決了上述問題,推薦使用。

2.CMake是Android Studio中新的構建方式,只須要配置CMakeList.txt文件便可,在CMakeList.txt定義哪些文件須要編譯以及與其餘靜態庫或動態庫的依賴關係。

3.在使用CMake時,須要將Gradle關聯到CMake項目,而且能夠在build.gradle中配置特定的NDK變量,用來改變CMake構建原生庫的方式。

相關文章
相關標籤/搜索