在build.gradle里面添加externalNativeBuild项就可以使用cmake
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
arguments "-DCMAKE_BUILD_TYPE=Release"
}
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2" // 也可以不要
}
}
}
通过arguments就可以给cmake传递参数:
指定build type为Release,这个Release是给CMakeList.txt里面用的,和gradle里面的build type不是一回事。
-DCMAKE_BUILD_TYPE=Release
指定NDK路径,System.getenv('ANDROID_NDK_HOME'获取系统环境变量ANDROID_NDK_HOME
-DCMAKE_ANDROID_NDK=$(System.getenv('ANDROID_NDK_HOME')),实测是不行的.
编译后会在app目录下生成.cxx目录
.cxx
├── cmake
│ ├── debug
│ │ └── arm64-v8a
│ │ ├── android_gradle_build.json
│ │ ├── android_gradle_build_mini.json
│ │ ├── build_command.txt
│ │ ├── build_model.json
│ │ ├── build.ninja
│ │ ├── build_output.txt
│ │ ├── CMakeCache.txt
打开这个目录下的build_command.txt文件,就可以看见argument是否生效,我的argument文件如下:
Executable : /home/tools/android-sdk/cmake/3.10.2.4988404/bin/cmake
arguments :
-DANDROID_ABI=arm64-v8a
-DANDROID_PLATFORM=android-26
-DCMAKE_BUILD_TYPE=Release
-DANDROID_NDK=/home/tools/android-ndk/android-ndk-r17-beta2
-DCMAKE_CXX_FLAGS=-std=c++11
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a
-DCMAKE_SYSTEM_VERSION=26
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_ANDROID_NDK=/home/tools/android-ndk/android-ndk-r17-beta2
-DCMAKE_TOOLCHAIN_FILE=/home/tools/android-ndk/android-ndk-r17-beta2/build/cmake/android.toolchain.cmake
-G Ninja
-DCMAKE_MAKE_PROGRAM=/home/tools/android-sdk/cmake/3.10.2.4988404/bin/ninja
-DCMAKE_BUILD_TYPE=Release
jvmArgs :