这个是个巨坑,目前尚未找到真正有效的方法利用cmake的途径获取适用于Android平台下的.a
文件,但找到一个比较讨巧的方法,是在stackoverflow上面看到的一位外国人自问自答。android
环境:git
首先获得的是默认的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
期待谷歌能对这块改善一下吧,over