在AndroidStudio下使用cmake編譯出靜態連接庫的方法

這個是個巨坑,目前尚未找到真正有效的方法利用cmake的途徑獲取適用於Android平臺下的.a文件,但找到一個比較討巧的方法,是在stackoverflow上面看到的一位外國人自問自答。android

環境:git

  • Android Studio 3.2.1
  • cmake3.6.4111459

首先獲得的是默認的CMakeLists.txt以下:github

cmake_minimum_required(VERSION 3.4.1)

add_library( 
        native-lib
        SHARED
        src/main/cpp/native-lib.cpp)

find_library( 
        log-lib
        log)

target_link_libraries( 
        native-lib
        ${log-lib})
複製代碼

若是咱們將SHARED變爲STATIC,事實上咱們將不會獲得任何的庫文件(不單單.a,連.so文件都沒有),我的認爲出現這麼不方便的問題應該是AndroiStudio或Gradle的問題。android-studio

解決問題的方法以下:bash

使用上面的代碼咱們已經能夠獲得.so文件了,而後咱們加入如下代碼得到.a文件,並使用和得到.so文件時使用的源文件同樣:app

add_library(
        native-lib-static
        STATIC
        src/main/cpp/native-lib.cpp
)
複製代碼

native-lib-static能夠換成任何你想要的名稱,可是不能夠是和動態連接庫的名稱同樣。ui

而後再修改你的target_link_libraries以下spa

target_link_libraries(
        native-lib
        native-lib-static
        ${log-lib})
複製代碼

再構建項目:debug

Gradle->app->build->assembleDebug/assembleRelease
複製代碼

最後你就能夠在app\.externalNativeBuild\cmake\debug(release)\<abi>\libnative-lib-static.a得到你想要的.a文件了。3d

1547193544148

期待谷歌能對這塊改善一下吧,over

相關文章
相關標籤/搜索