環境
我用的是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編譯方式都大致過了一遍。