繼上一篇的直接實現後,這一篇主要是記錄一些概念上的東西,或是一些解釋。
注:以下代碼裏的“#”號表示註釋。
CMake
你或許聽過好幾種 Make 工具,例如 GNU Make ,QT 的 qmake ,微軟的 MS nmake,BSD Make(pmake),Makepp,等等。這些 Make 工具遵循着不同的規範和標準,所執行的 Makefile 格式也千差萬別。這樣就帶來了一個嚴峻的問題:如果軟件想跨平臺,必須要保證能夠在不同平臺編譯。而如果使用上面的 Make 工具,就得爲每一種標準寫一次 Makefile ,這將是一件讓人抓狂的工作。
CMake就是針對上面問題所設計的工具:它首先允許開發者編寫一種平臺無關的 CMakeLists.txt 文件來定製整個編譯流程,然後再根據目標用戶的平臺進一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。從而做到“Write once, run everywhere”。顯然,CMake 是一個比上述幾種 make 更高級的編譯配置工具。一些使用 CMake 作爲項目架構系統的知名開源項目有 VTK、ITK、KDE、OpenCV、OSG 等 [1]。
來自 CMake入門實戰
小結
CMake是一個更高級的編譯配置,它讓開發者只要編寫一次文件後,會根據不同的平臺自動生成不同的本地化文件。
CMakeLists
在上一篇的CMakeLists.txt文件裏有三個關鍵詞:add_library,find_library和target_link_libraries。
add_library
這個方法主要是讓你寫的cpp文件作爲一個庫添加到構建腳本里,這樣就能被調用到。
add_library( # 設置一個名稱
native-lib
# 設置這個庫爲SHARED類型
SHARED
# 指定出它的路徑。
src/main/cpp/native-lib.cpp
)
find_library
這個方法主要是添加NDK的API。就是我們需要NDK的什麼API就在這裏進行聲明添加即可。
find_library( # 設置一個路徑名
log-lib
# 指定要用的NDK裏的哪個庫,主要是讓CMake能夠去定位到
log )
target_link_libraries
我理解應該是一些庫之間的一些關聯。
target_link_libraries( # 指定目標庫
native-lib
calculateBeerResult
# 連接目標庫和NDK裏的log庫,${}這個寫法表示引用
${log-lib} )
JNI的使用
上一篇的native-lib.cpp裏主要是對JNI的一些使用,裏面有C(C++)語言的語法,這個我就不寫了,因爲我也不熟悉,也是當時自己搜索後寫出來的。
#include <jni.h>
#include "calculateBeerResult.h" //引入計算方法的頭部
extern "C"
JNIEXPORT jintArray JNICALL
Java_message_license_szca_com_drinkbeer_presenter_CalculateBeerPresenter_getCalculateResult(
JNIEnv *env,
jobject /* this */,
int money//java傳進來的金額) {
}
待續。。。