android studio cmake 配置.a連線庫
阿新 • • 發佈:2019-02-01
自 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.
然後告訴編譯器,libjsoncppp.a在哪個目錄下,並指定連結庫的名稱include_directories( src/main/cpp/include/jsoncpp src/main/cpp/include/curl src/main/cpp/include/openssl )
接著新增
#新增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編譯就可以使用了。是不是很簡單?