查看项目中是否有显示配置,可使用ndk关键字在项目中全局搜索,包括gradle和local.properties,如果没有则按照如下步骤。
对debug编译出的so使用readelf -p “.comment”工具,查看其输出
String dump of section '.comment':
[ 0] Android (8490178, based on r450784d) clang version 14.0.6 (<https://android.googlesource.com/toolchain/llvm-project> 4c603efb0cca074e9238af8b4106c30add4418f6)
[ 9d] Linker: LLD 14.0.6
这里有一个based on r450784d,结合ai以及查文档,可以看到这个ndk是r25c
https://github.com/android/ndk/wiki/Changelog-r25
ndk版本对安卓系统版本没有明确的要求,ndk版本的change log中会给出该ndk默认支持的版本,比如r25c支持的最低系统API是19
这里插一嘴,说一说我发现的有趣的事情,
首先,AGP版本和Gradle版本是有依赖关系的,想要使用更高版本的AGP,必须要Gradle版本能够对应上,其次,高版本的compileSdk可能对应高版本的AGP,这也是有的时候我们升级项目的compileSdk版本,必须修改AGP版本的原因。
同时,有的时候你会发现我们并没有在项目中指定ndk的版本,但是对应的native代码能够正常编译,这是因为每一个版本的AGP都有自己默认的ndk版本,比如AGP 8.1,它使用的ndk版本是25.1.8937393,参考https://developer.android.google.cn/build/releases/past-releases/agp-8-1-0-release-notes?hl=zh-cn
如果项目中使用了ndk,那么最好是我们显式地指定ndk的版本,而不是依赖AGP提供的默认版本,ndk版本通常来说和安卓sdk版本没有强依赖关系,但是每一个ndk都有最低支持版本,需要注意这一点。不要配置错。一般来说,ndk版本遵循够用就行的原则。不必一味追求最新的版本。