前言
一个本来好好的项目,突然在运行的时候报错:
No version of NDK matched the requested version 21.0.6113669. Versions available locally: 20.1.5948944
网上很多人建议在build.gradle中添加ndk,如下:
android { ... ndkVersion '20.1.5948944' } 复制代码
也确实可以解决问题,但是本来一个对ndk版本没有强依赖的项目,现在固定在一个版本上,其他开发者也必须有这个具体版本才能正常编译运行。
我认为这并不是一个完美的解决方案,于是继续调查了一下。
gradle的坑
经过调查发现,这果然是gradle的一个坑,某大佬描述如下:
20年2月-6月发行的Android Gradle plugin 3.6-4.1之间的版本,如果项目有依赖ndk,可能存在编译不通过问题。4.1.0-beta01已修复该bug。
所以我觉得真正的解决方案应该是升级gradle,如果要升级gradle,就需要gradle和gradle plugin同时升级,而且二者之间存在版本对应,在之前两者的版本号并不一致,导致每次都需要进行查询。近期google终于将两者版本升级成一致的了,也就避免了每次去对照版本了,所以我将gradle和gradle plugin升级到7.0.x后就可以正常编译运行了,具体如下:
classpath 'com.android.tools.build:gradle:7.0.3' 复制代码
和
distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-bin.zip