ssk*_*ssk 6 android cmake android-ndk android-studio ninja
我通过Android Studio的SDK工具安装了以下CMAKE和Ninja:
~/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja --version
1.8.2
Run Code Online (Sandbox Code Playgroud)
尝试构建项目时遇到“错误配置”。这是构建输出:
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 :
Run Code Online (Sandbox Code Playgroud)
它不见了:
-DCMAKE_MAKE_PROGRAM=/Users/ssk/Library/Android/sdk/cmake/3.10.2.4988404/bin/ninja
Run Code Online (Sandbox Code Playgroud)
错误:
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
Run Code Online (Sandbox Code Playgroud)
仅当我切换到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"
}
}
Run Code Online (Sandbox Code Playgroud)
如何解决?
从 Android Studio SDK Manager 安装/更新 CMake
如果 ninja 存在,请从 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"
}
Run Code Online (Sandbox Code Playgroud)
因为,ANDROID_PLATFORM应该由 Android 外部原生构建系统自动决定,minSdkVersion从how ANDROID_PLATFORMworks看下面的官方文档:
您应该
minSdkVersion在模块级文件的defaultConfig或productFlavors块中设置属性,而不是直接更改此标志build.gradle。这可确保您的库仅由安装在运行适当版本的 Android 的设备上的应用程序使用。然后,CMake 工具链使用以下逻辑为您正在构建的 ABI 选择最佳平台版本:
- 如果存在 ABI 的平台版本等于
minSdkVersion,则 CMake 使用该版本。除此以外,- 如果存在低于
minSdkVersionABI 的平台版本,CMake 将使用这些平台版本中的最高版本。这是一个合理的选择,因为缺少平台版本通常意味着自上一个可用版本以来本机平台 API 没有任何更改。- 否则,CMake 将使用下一个高于
minSdkVersion.
而且,-DANDROID_ABI=armeabi-v7a也不好。您不应在此处定义此参数。CMake 将根据您的 abiFilters 自动迭代您的所有 ABI。如果您只是想构建armeabi-v7a,则可以使用 指定它abiFilter,例如
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
Run Code Online (Sandbox Code Playgroud)
此外,rtti并且exceptions是cppFlags,下面应该是设置这两个标志的正确方法。
cppFlags "-std=c++11 -frtti -fexceptions"
Run Code Online (Sandbox Code Playgroud)
确保您已正确配置ANDROID_NDK路径,因为根据您的问题,您设置了两个版本的 NDK,一个是-DANDROID_NDK=/Users/ssk/android-ndk-r17c/,另一个是-DANDROID_NDK=/Users/ssk/Library/Android/sdk/ndk-bundle. 配置 NDK 路径local.properties:
ndk.dir=/Users/ssk/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/ssk/Library/Android/sdk
Run Code Online (Sandbox Code Playgroud)
-GAndroid Gradle - Ninja 的修复方法是什么?
arguments在cmake配置中添加以下内容:
externalNativeBuild {
cmake {
...
version "3.10.2"
arguments "-GAndroid Gradle - Ninja"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2897 次 |
| 最近记录: |