在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

相关文章
相关标签/搜索