在android studio中开发cmake项目,使用的ndk版本是r10e
此时gradle同步报错:
Error:Error occurred while communicating with CMake server"CMAKE SERVER: CMAKE SERVER: [== "CMake Server" ==[ CMAKE SERVER: {"supportedProtocolVersions":[{"isExperimental":true,"major":1,"minor":1}],"type":"hello"} CMAKE SERVER: ]== "CMake Server" ==]"
搜索到文章https://stackoverflow.com/questions/47393862/errorerror-occurred-while-communicating-with-cmake-server
提示升级到android的gradle插件版本:3.1.0以上即可解决问题,升级后,报错,且只有一个很简单的错误信息:
SIMPLE: Error configuring
我这边猜测是ndk 10 的版本太老了,而cmake此时用的是比较新的3.10的版本。因此打算尝试降低cmake版本或者升级ndk。
升级NDK
升级到14依然没用,我索性升级到20,编译通过了,但是ndk20不支持 armeabi,因此不能升到这么高的版本。
降低cmake版本
android{externalNativeBuild {cmake {path "CMakeLists.txt"//指定具体的cmake版本为3.6.4version "3.6.4"}}
同步,报错:
SIMPLE: Error while executing process /Users/HWilliam/Library/Android/sdk/3.10.2.4988404/bin/cmake with arguments {-H/Users/HWilliam/AllProject/AndroidStudioProjects/windowsProject/POLYV/PolyvVod/PolyvAndroidSDKSharedJniLibrary/app -B/Users/HWilliam/AllProject/AndroidStudioProjects/windowsProject/POLYV/PolyvVod/PolyvAndroidSDKSharedJniLibrary/app/.externalNativeBuild/cmake/release/armeabi-v7a -DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=android-9 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/HWilliam/AllProject/AndroidStudioProjects/windowsProject/POLYV/PolyvVod/PolyvAndroidSDKSharedJniLibrary/app/build/intermediates/cmake/release/obj/armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DANDROID_NDK=/Users/HWilliam/ndk/android-ndk-r14b -DCMAKE_TOOLCHAIN_FILE=/Users/HWilliam/ndk/android-ndk-r14b/build/cmake/android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=/Users/HWilliam/Library/Android/sdk/cmake/3.6.4111459/bin/ninja -GAndroid Gradle - Ninja}
报错信息中一会又用的Error while executing process /Users/HWilliam/Library/Android/sdk/3.10.2.4988404/bin/cmake
一会又用的-DCMAKE_MAKE_PROGRAM=/Users/HWilliam/Library/Android/sdk/cmake/3.6.4111459/bin/ninja
看着是3.10和3.6的混用了。
明明指定的是3.6的cmake,但是用的是3.10。挺奇怪的,因此我直接把本地的3.10的cmake卸载了。
同步再报错:
Unable to find CMake with version: 3.6.4 within folder: [/usr/local/opt/binutils/bin, /Users/HWilliam/.npm-global/bin, /Applications/Visual Studio Code.app/Contents/Resources/app/bin, /Users/HWilliam/ndk/android-ndk-r10e, /usr/local/bin, /usr/local/bin, /usr/bin, /bin, /usr/sbin, /sbin, /opt/X11/bin, /Users/HWilliam/Library/Android/sdk/platform-tools, /Users/HWilliam/Library/Android/sdk/tools].Please make sure the folder with the CMake binary is added to the PATH environment variable.
意思是找不到cmake3.6.4了,需要我们直接指定一个路径
那么在local.properties中添加:
cmake.dir=/Users/HWilliam/Library/Android/sdk/cmake/3.6.4111459
再同步,报错:
报错指定的文件是:android.toolchain.cmake的这一行:if(NOT ANDROID_NDK_SOURCE_PROPERTIES MATCHES "${ANDROID_NDK_SOURCE_PROPERTIES_REGEX}")
而android.toolchain.cmake文件是在cmake/3.6.4111459/android.toolchain.cmake
总结就是:
cmake的构建文件找不到变量CMAKE_C_COMPILER和CMAKE_CXX_COMPILER。在ndk开发中c的编译器一般不是工作机器提供的,而是ndk内部的交叉编译工具提供的。因此这里考虑下是不是ndk10的版本太老旧,不支持cmake?升级下ndk的版本到ndk14。
