为什么Android Gradle插件无法自动覆盖/忽略已弃用的SDK?

时间:2019-02-02 11:23:42

标签: android gradle android-gradle

假设您有一个使用Android SDK 28和构建工具28的项目A28。

compileSdkVersion 28
buildToolsVersion '28.0.2'

该项目依赖于使用Android SDK 23和工具23.0.0的项目B23。

构建A28时,构建将失败。而不是得到有用的错误,我得到的是一堆文件(B23中的所有文件)都丢失了并且无法链接(因为它不是通过gradle编译的,但是没有任何迹象)。

唯一可以暗示问题的是:

  

警告:指定的Android SDK Build Tools版本(23.0.0)为   被忽略,因为它低于最低支持的版本(28.0.3)   Android Gradle插件3.2.1。 Android SDK Build Tools 28.0.3将   用过的。要取消显示此警告,请删除“ buildToolsVersion '23 .0.0'”   从您的build.gradle文件,作为每个版本的Android Gradle   插件现在具有构建工具的默认版本。

但这明确表示,gradle将使用28.0.3工具版本而不是23.0.0编译该项目(B23)。

如果我添加

subprojects {
  afterEvaluate { project ->
    if (project.hasProperty("android")) {
      android {
        compileSdkVersion 28
        buildToolsVersion '28.0.2'
      }
    }
  }
}

对我的build.gradle进行操作,以便使用buildTools 28和sdk 28显式覆盖所有内容,构建成功。

为什么会这样?我想念什么吗?较低的sdk和构建工具是否应该已被覆盖/忽略?

1 个答案:

答案 0 :(得分:1)

您可以从两个项目中完全删除buildToolsVersion。这是因为将使用根据targetSdkVersion的最新版本。甚至28.0.2都低于Gradle插件28.0.3的最低3.2.1要求。