這個是個巨坑,目前尚未找到真正有效的方法利用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