1. 程式人生 > >android studio cmake 配置.a連線庫

android studio cmake 配置.a連線庫

自 android studio 2.2 +後就集成了ndk開發, 自帶cmake 編譯器.  編寫ndk時候,配置很簡單。再也不需要用android.mk配置檔案。

新建一個帶ndk開發專案的結構是這樣的,


言歸正傳,那麼要新增第三方的xx.a連結庫呢?

通常我們把第三方提供的h資料夾,放在cpp的include裡面。這是規範,不是必須。而xxx.a庫放在src/main/jniLibs/armeabi目錄下。

本文章以新增libjsoncpp.a連線庫做例子

首先在cpp目錄下建立一個include資料夾,把jsoncpp官方提供的標頭檔案資料夾拷貝到include裡面(我這個專案有3個連結庫,jsoncpp, curl , openssl,另外2個僅做參考作用,與其無關



第二步, 在app的src目錄的main下,建立一個資料夾,jniLibs,然後在jniLibs裡面再建立一個armeabi資料夾。

然後把libjsoncpp.a連結庫拷貝進去。


第三步, 動態庫與標頭檔案拷貝進去時候,是需要告訴編譯器做關聯的在app目錄的src資料夾下有個CMakeLists.txt檔案,我們通過它編寫配置資訊。

jsoncpp標頭檔案所在目錄告訴編譯,在裡面新增

include_directories( src/main/cpp/include/jsoncpp)
如果有多個連結庫,那麼可以這樣
例如有三個連結庫,jsoncpp, currl , openssl.
include_directories( src/main/cpp/include/jsoncpp
                     src/main/cpp/include/curl
                     src/main/cpp/include/openssl
                     )
然後告訴編譯器,libjsoncppp.a在哪個目錄下,並指定連結庫的名稱

接著新增

#新增json庫
add_library(jsoncpp STATIC IMPORTED)
set_target_properties(jsoncpp
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libjsoncpp.a)

然後修改target_link_libraries,加多一行jsoncpp

target_link_libraries(native-lib
                      jsoncpp
                      ${log-lib})




如果有多個,那麼可以多次新增。如
#新增json庫
add_library(jsoncpp STATIC IMPORTED)
set_target_properties(jsoncpp
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libjsoncpp.a)

#新增curl網路請求
add_library(curl STATIC IMPORTED)
set_target_properties(curl
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcurl.a)

#新增加密工具(md5, base64, des, aes , asa) part-1
add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libcrypto.a)

#新增加密工具(md5, base64, des, aes , asa) des加密 part-2
add_library(ssl STATIC IMPORTED)
set_target_properties(ssl
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libssl.a)
target_link_libraries(native-lib
                      jsoncpp
                      curl
                      crypto
                      ssl
                      ${log-lib}) 

然後gradle編譯就可以使用了。是不是很簡單?