我通过Android的SDK工具安装了以下CMAKE和Ninja:
~/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja --version
1.8.2我在试图构建我的项目时遇到了“错误配置”。以下是构建输出:
Executable : /Users/ssk/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake
arguments :
-H/Users/ssk/MyProject
-B/Users/ssk/MyProject/.externalNativeBuild/cmake/debug/armeabi-v7a
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-16
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/ssk/MyProject/build/intermediates/cmake/debug/obj/armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle
-DCMAKE_CXX_FLAGS=-std=c++11
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a
-DCMAKE_SYSTEM_VERSION=16
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_ANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle
-DCMAKE_TOOLCHAIN_FILE=/Users/ssk/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake
-G Ninja
-DANDROID_STL=gnustl_statics
-DANDROID_CPP_FEATURES=rtti exception
-DANDROID_TOOLCHAIN=gcc
-DANDROID_NDK=/Users/ssk/android-ndk-r17c/
jvmArgs : 它不见了:
-DCMAKE_MAKE_PROGRAM=/Users/ssk/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja错误:
CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool只有当我切换到CMake版本(比如3.6.3155560 )时,它才能工作。否则,我必须从brew或macports安装忍者。
下面是我的build.gradle的片段:
externalNativeBuild {
cmake {
// Linker flags and Visibility options keeps the size of the library small
cppFlags "-std=c++11"
arguments "-DANDROID_STL=gnustl_static",
"-DANDROID_CPP_FEATURES=rtti exceptions",
"-DANDROID_TOOLCHAIN=gcc"
}
}怎么修呢?
发布于 2019-02-01 05:25:08
从管理器安装/更新CMake

如果存在忍者,请从sdk根目录检查您的CMake。

下面是不好的。
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_ABI=armeabi-v7a",
"-DANDROID_PLATFORM=android-16",
"-DANDROID_STL=gnustl_static",
"-DANDROID_CPP_FEATURES=rtti exceptions",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=libs"
}由于ANDROID_PLATFORM应该由Android外部本地构建系统根据minSdkVersion自动确定,请参见 works的正式文档:
与其直接更改此标志,不如在模块级
minSdkVersion文件的defaultConfig或productFlavors块中设置build.gradle属性。这将确保您的库只被安装在运行适当版本Android的设备上的应用程序使用。然后,CMake工具链使用以下逻辑为您构建的ABI选择最佳平台版本:
minSdkVersion的ABI平台版本,CMake将使用该版本。否则,minSdkVersion的平台版本,则CMake使用这些平台版本中的最高版本。这是一个合理的选择,因为缺少的平台版本通常意味着自上一个可用版本以来对本机平台API没有任何更改。minSdkVersion更高的下一个可用平台版本。而且,-DANDROID_ABI=armeabi-v7a也不是很好。您不应该在这里定义这个参数。CMake将根据您的abiFilters自动迭代所有ABIs。如果您只想构建armeabi-v7a,可以使用abiFilter来指定它。
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}另外,rtti和exceptions是cppFlags,下面应该是设置这两个标志的正确方法。
cppFlags "-std=c++11 -frtti -fexceptions"确保您已经正确配置了ANDROID_NDK路径,因为根据您的问题,您有两个版本的NDK,一个是-DANDROID_NDK=/Users/ssk/android-ndk-r17c/,另一个是-DANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle。从local.properties配置NDK路径
ndk.dir=/Users/ssk/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/ssk/Library/Android/sdk-GAndroid级-忍者的修复方法是什么?
将下面的arguments添加到cmake配置:
externalNativeBuild {
cmake {
...
version "3.10.2"
arguments "-GAndroid Gradle - Ninja"
}
} https://stackoverflow.com/questions/54470140
复制相似问题