在android studio中使用cmake

在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,最后发现这个是穿不传不进去的,只能修改local.properties做到.
-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 : 

你可能感兴趣的:(android,cmake)