CMake與NDK搭配使用時,可以配置的部分變數: 1. :指定Android的目標版本,對應 目錄下的版本。通常情況下是 中的 ,這樣就能確保所有大於等於 的設備都可以使用編譯生成的庫。 但是也有例外,比如:當 時,即使 為`18 ANDROID_PLATFORM=android 21 $NDK/ ...
CMake與NDK搭配使用時,可以配置的部分變數:
ANDROID_PLATFORM
:指定Android的目標版本,對應$NDK/platforms/
目錄下的版本。通常情況下是defaultConfig
中的minSdkVersion
,這樣就能確保所有大於等於minSdkVersion
的設備都可以使用編譯生成的庫。 但是也有例外,比如:當ANDROID_ABI=arm64-v8a
時,即使minSdkVersion
為18
,但是ANDROID_PLATFORM=android-21
,因為從API21開始才支持64位庫。這裡的版本直接決定了使用$NDK/platforms
目錄下哪個系統版本的庫和頭文件。ANDROID_STL
:指定使用的STL庫,STL庫不是Android系統自帶的,若使用靜態庫(c++_static
),則會鏈接進目標庫;若使用動態庫(c++_shared),Gradle會將動態庫(libc++_shared.so)和目標庫一起打包。詳情可參考C++ 庫支持。ANDROID_ARM_NEON
:指定CMake是否構建支持NEON
的目標庫。API大於等於23時,預設值為true,否則為false。
Cmake編譯時,是通過$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin
下的交叉編譯工具進行編譯和鏈接,arm-linux-androideabi-4.9
表示對應abi架構和位數,例如:arm64就是aarch64-linux-android-4.9
。
而鏈接時所依賴的系統庫,則是在$NDK/platforms/${ANDROID_PLATFORM}/${abi}/usr/lib
目錄下。