這個是個巨坑,目前還沒有找到真正有效的方法利用cmake的途徑獲取適用於Android平臺下的.a
檔案,但找到一個比較討巧的方法,是在stackoverflow上面看到的一位外國人自問自答。
環境:
- Android Studio 3.2.1
- cmake3.6.4111459
首先得到的是預設的CMakeLists.txt如下:
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的問題。
解決問題的方法如下:
使用上面的程式碼我們已經可以得到.so
檔案了,然後我們加入以下程式碼獲得.a
檔案,並使用和獲得.so
檔案時使用的原始檔一樣:
add_library(
native-lib-static
STATIC
src/main/cpp/native-lib.cpp
)
複製程式碼
native-lib-static
可以換成任何你想要的名稱,但是不可以是和動態連結庫的名稱一樣。
然後再修改你的target_link_libraries
如下
target_link_libraries(
native-lib
native-lib-static
${log-lib})
複製程式碼
再構建專案:
Gradle->app->build->assembleDebug/assembleRelease
複製程式碼
最後你就可以在app\.externalNativeBuild\cmake\debug(release)\<abi>\libnative-lib-static.a
獲得你想要的.a
檔案了。
期待谷歌能對這塊改善一下吧,over