Android studio的NDK開發基礎

環境

我用的是android studio 2.2.3版本,直接在SDK Tools 中選擇安裝 NDK 和 CMake 即可。
這裏寫圖片描述

然後新建項目的時候,選擇Include C++ Support 選項
這裏寫圖片描述

我們可以發現新建的項目在main下會出現一個cpp目錄,src目錄下會出現一個CMakeLists.txt
這裏寫圖片描述

CMakeList.txt編譯方式

cpp目錄就是你寫相關sdk代碼的地方,CMakeLists.txt就是CMake的編譯規則配置文件。選擇Make Project編譯一下,
這裏寫圖片描述
編譯成功就會如下提示:
這裏寫圖片描述

cpp目錄下就是放c/cpp的源碼,和之前jni目錄類似,
只是源碼之間操作的時候 include頭文件的時候會需要include一個比較完整的路徑。

例如:第一種情況纔可以正常引用到需要的頭文件。
這裏寫圖片描述

當然自己添加的文件是用“”include,而系統的依然用<>include是沒問題的。

CMakeList.txt講解

然後我們來大致將一下CMakeList.txt

#設置CMake最低編譯版本。 
cmake_minimum_required(VERSION...)
...
#創建庫
add_library(
#第一個參數是設置新建的庫的名稱
xxx-native-lib
#第二個參數是設置庫類型,靜態(STATIC)/共享 SHARED
SHARED
#後面就是提供源碼的相對路徑
src/main/cpp/native-lib.cpp
)
...
#這個裏面可以幫你找你需要鏈接的其他的庫
#因爲系統庫被包含在默認的搜索路徑,你只需要指定要添加的公共NDK庫名稱。
find_library(
#第一個參數是設置路徑變量的名稱
log-lib
#第二個參數是指定你想讓CMake找到NDK庫名稱
log
)
...
#指定要鏈接到你的庫的庫。你可以鏈接多個庫,就像你在構建腳本的定義,建立第三方庫或系統庫。
target_link_libraries(
#第一個參數是指定目標庫,一般就是你當前這個庫
native-lib
#鏈接的到的指定庫。
${log-lib}
)

如果我們需要設置一個固定的編譯目錄,就可以如下操作

set(SDK_PATH ${CMAKE_SOURCE_DIR}/src/main/sdk_src/)

然後在add_library就可以簡單的調用到目錄文件了

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             # Associated headers in the same location as their source
             # file are automatically included.
              ${SDK_PATH}/util/time_util.c )

嗯基本CMake開發就是這樣配置的。

Android.mk編譯方式

後面我們再提一下之前寫過的Android.mk,然後使用ndk直接編譯的方式。

建立Android.mk,到cpp目錄下,或者src任意目錄其實都可以的,只是Android.mk裏面對應的源碼路徑進行修改即可。

這裏寫圖片描述

然後我們在cmd模式下,切換到這個Android.mk文件目錄下,執行你ndk目錄下安裝的ndk-build.cmd文件(例如我的目錄是 C:\android\sdk\ndk-bundle\build\ndk-build.cmd),如下圖

這裏寫圖片描述

執行就可以編譯了,編譯log會打印對應導入的.c、cpp文件,和.a,編譯生成.so文件這裏寫圖片描述

如果需要清理舊的生成文件,只需要在加關鍵字clean就可以了,例如

>C:\android\sdk\ndk-bundle\build\ndk-build.cmd clean

這樣的話,在android studio,兩種ndk編譯方式都大致過了一遍。

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