1.存在的问题
Android Studio SDK manager管理器中截止目前最新的Cmake版本为3.18.1,如下图 编译时出现警告:
C/C++: debug|arm64-v8a :Call Stack (most recent call first):
C/C++: debug|arm64-v8a : D:/android_sdk/ndk/23.1.7779620/build/cmake/android.toolchain.cmake:55 (include)
C/C++: debug|arm64-v8a : D:/MyWork/2022/android/app/.cxx/Debug/25n33124/arm64-v8a/CMakeFiles/3.18.1-g262b901-dirty/CMakeSystem.cmake:6 (include)
C/C++: debug|arm64-v8a : D:/MyWork/2022/android/app/.cxx/Debug/25n33124/arm64-v8a/CMakeFiles/CMakeTmp/CMakeLists.txt:2 (project)
C/C++: debug|arm64-v8a :CMake Warning at D:/android_sdk/ndk/23.1.7779620/build/cmake/android-legacy.toolchain.cmake:416 (message):
C/C++: debug|arm64-v8a : An old version of CMake is being used that cannot automatically detect
C/C++: debug|arm64-v8a : compiler attributes. Compiler identification is being bypassed. Some
C/C++: debug|arm64-v8a : values may be wrong or missing. Update to CMake 3.19 or newer to use
C/C++: debug|arm64-v8a : CMake's built-in compiler identification.
警告内容为:正在使用无法自动检测编译器属性的旧版本的 CMake。 正在绕过编译器标识。 某些值可能错误或缺失。 更新到 CMake 3.19 或更高版本,以使用 CMake 的内置编译器标识。
2 下载最新版CMake和ninja
下载最新版本的CMake(CMake截止发稿最新稳定版为3.22.3) 下载最新版本的ninja
假设条件
- Android SDK默认安装在"D:\android_sdk"
- CMake默认安装在"E:\cmake"
- ninja安装至"E:\cmake\bin",即和cmake.exe在同一目录
2.1 更新CMake需要修改local.properties和模块build.gradle文件.
local.properties
cmake.dir="E\:\\cmake"
模块build.gradle文件
android {
//设置CMake
externalNativeBuild{
cmake{
version "3.22.3"
path 'src/main/cpp/CMakeLists.txt'
}
}
}
- 完成后打开项目目录,再打开app目录,然后删除.cxx和build目录;
- 在android studio菜单中点击 Build->Rebuild Project会提示以下错误
[CXX1301] Could not get version from cmake.dir path '"E:\cmake"'.
2.2 正确更新CMake的方法
- 将E:\cmake复制到Android SDK中的cmake目录
xcopy /S /Y e:\cmake D:\android_sdk\cmake\3.22.3
local.properties不定义cmake.dir
模块build.gradle文件保持不变
android {
//设置CMake
externalNativeBuild{
cmake{
version "3.22.3"
path 'src/main/cpp/CMakeLists.txt'
}
}
}
- 完成后打开项目目录,再打开app目录,然后删除.cxx和build目录;
- 在android studio菜单中点击 Build->Rebuild Project即可。
题外话local.properties中ndk.dir已弃用,并将在将来的版本中删除。还是老实在Android Studio SDK manager管理器中下载使用吧。
|