Android之一個簡單的NDK使用(二)

繼上一篇的直接實現後,這一篇主要是記錄一些概念上的東西,或是一些解釋。

注:以下代碼裏的“#”號表示註釋。

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傳進來的金額) {
}

待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章