前两天, 没修改什么, 打开Android Studio编so, 忽然就不成功了.
报错信息如下:
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
Support for CMake 3.7 and higher is a preview feature. To report a bug, see https://developer.android.com/studio/report-bugs.html
External native generate JSON debug: building json with force flag false
External native generate JSON debug: starting JSON generation
External native generate JSON debug: using platform version 16 for ABI ARMEABI_V7A and min SDK version 14
External native generate JSON debug: rebuilding JSON /Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/android_gradle_build.json due to:
External native generate JSON debug: - expected json /Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/android_gradle_build.json file is not present, will remove stale json folder
External native generate JSON debug: - missing previous command file /Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/cmake_build_command.txt, will remove stale json folder
External native generate JSON debug: removing stale contents from '/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a'
External native generate JSON debug: created folder '/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a'
External native generate JSON debug: executing cmake Executable : /Users/along/Library/Android/sdk/cmake/3.10.2.4988404/bin/cmake
arguments :
-H/Users/oncealong/Android-Project/
-B/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a
-DANDROID_ABI=armeabi-v7a
-DANDROID_PLATFORM=android-16
-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/oncealong/Android-Project/build/intermediates/cmake/debug/obj/armeabi-v7a
-DCMAKE_BUILD_TYPE=Debug
-DANDROID_NDK=/Users/along/Library/Android/android-ndk-r18b
-DCMAKE_CXX_FLAGS=-frtti -fexceptions -D__cdecl= -D__stdcall=
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a
-DCMAKE_SYSTEM_VERSION=16
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_ANDROID_NDK=/Users/along/Library/Android/android-ndk-r18b
-DCMAKE_TOOLCHAIN_FILE=/Users/along/Library/Android/android-ndk-r18b/build/cmake/android.toolchain.cmake
-G Ninja
-DANDROID_TOOLCHAIN=clang
-DANDROID_STL=c++_static
jvmArgs :
[== "CMake Server" ==[
{"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":1}],"type":"hello"}
]== "CMake Server" ==]
[== "CMake Server" ==[
{
"type": "handshake",
"cookie": "gradle-cmake-cookie",
"protocolVersion": {
"isExperimental": true,
"major": 1,
"minor": 1
},
"sourceDirectory": "/Users/oncealong/Android-Project/",
"buildDirectory": "/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a",
"generator": "Ninja"
}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"gradle-cmake-cookie","inReplyTo":"handshake","type":"reply"}
]== "CMake Server" ==]
[== "CMake Server" ==[
{
"type": "configure",
"cacheArguments": [
"",
"-DANDROID_ABI\u003darmeabi-v7a",
"-DANDROID_PLATFORM\u003dandroid-16",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY\u003d/Users/oncealong/Android-Project/build/intermediates/cmake/debug/obj/armeabi-v7a",
"-DCMAKE_BUILD_TYPE\u003dDebug",
"-DANDROID_NDK\u003d/Users/along/Library/Android/android-ndk-r18b",
"-DCMAKE_CXX_FLAGS\u003d-frtti -fexceptions -D__cdecl\u003d -D__stdcall\u003d",
"-DCMAKE_SYSTEM_NAME\u003dAndroid",
"-DCMAKE_ANDROID_ARCH_ABI\u003darmeabi-v7a",
"-DCMAKE_SYSTEM_VERSION\u003d16",
"-DCMAKE_EXPORT_COMPILE_COMMANDS\u003dON",
"-DCMAKE_ANDROID_NDK\u003d/Users/along/Library/Android/android-ndk-r18b",
"-DCMAKE_TOOLCHAIN_FILE\u003d/Users/along/Library/Android/android-ndk-r18b/build/cmake/android.toolchain.cmake",
"-G Ninja",
"-DANDROID_TOOLCHAIN\u003dclang",
"-DANDROID_STL\u003dc++_static"
]
}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"","inReplyTo":"configure","message":"CMake Error: 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.","title":"Error","type":"message"}
]== "CMake Server" ==]
CMake Error: 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 Error: 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 Server" ==[
{"cookie":"","inReplyTo":"configure","progressCurrent":1000,"progressMaximum":1000,"progressMessage":"Configuring","progressMinimum":0,"type":"progress"}
]== "CMake Server" ==]
[== "CMake Server" ==[
{"cookie":"","inReplyTo":"configure","message":"Configuring incomplete, errors occurred!\nSee also \"/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log\".","type":"message"}
]== "CMake Server" ==]
Configuring incomplete, errors occurred!
See also "/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".
Configuring incomplete, errors occurred!
See also "/Users/oncealong/Android-Project/.externalNativeBuild/cmake/debug/armeabi-v7a/CMakeFiles/CMakeOutput.log".
[== "CMake Server" ==[
{"cookie":"","errorMessage":"Configuration failed.","inReplyTo":"configure","type":"error"}
]== "CMake Server" ==]
Configuration failed.
External native generate JSON debug: JSON generation completed with problems
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':armplayer-lib'.
> executing external native build for cmake /Users/oncealong/Android-Project/CMakeLists.txt
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
找了下资料, 只有如何修复这个问题, 没有为什么这么修复. 最终找到了官网:
https://developer.android.com/studio/projects/add-native-code#vanilla_cmake
官网表示现在支持CMake 3.6和3.10, 但是gradle默认选择3.6.
如果配置成3.10, 我按照官网的3.10配置没成功, 按照官网的"Use a custom CMake version"配置成功.
这里应该是gradle plugin低版本和CMake 3.10默认设置不匹配导致, 需要额外手动介入解决.
推荐的是直接按照官网的"Use a custom CMake version"来解决.
The SDK Manager includes the 3.6.0 forked version of CMake and version 3.10.2. Projects that don't set a specific CMake version in build.gradle
are built with CMake 3.6.0. To use the later included version, specify CMake version 3.10.2 in your module's build.gradle
file:
android { ... externalNativeBuild { cmake { ... version "3.10.2" } } }
While not a best practice, you may specify the CMake version as the minimum version by adding a + to the end of the build.gradle
entry, such as 3.10+
or 3+
.
If you want to use a CMake version 3.7 or higher that is not included by the SDK Manager, follow these steps:
build.gradle
file: android { ... externalNativeBuild { cmake { ... version "cmake-version" } } }
PATH
environment variable or include it in your project's local.properties
file, as shown below. If Gradle is unable to find the version of CMake you specified in your build.gradle
file, you get a build error. # If you set this property, Gradle no longer uses PATH to find CMake. cmake.dir="path-to-cmake"
PATH
environment variable.