ext和project.ext在gradle中具有相同的范围?

时间:2018-02-14 07:40:43

标签: android gradle android-gradle

如果我有以下Android gradle脚本;

Task<IEnumerable<T>>
  1. ext { compileSdkVersion = 25 } android { compileSdkVersion project.compileSdkVersion } 的范围是否与ext {...}相同?

  2. 下面两个是否有相同的范围?

    • project.ext {...}
    • compileSdkVersion project.compileSdkVersion
    • compileSdkVersion this.compileSdkVersion - 不。这给出了错误

1 个答案:

答案 0 :(得分:0)

你可以check the doc:

  

额外属性
  Gradle的域模型中的所有增强对象都可以包含额外的用户定义属性。这包括但不限于项目,任务和源集。可以通过拥有对象的ext属性添加,读取和设置额外属性。或者,可以使用ext块一次添加多个属性。

在您的代码中,ext块会为project对象添加两个额外属性。

ext也是project.ext的简写。 要读取额外的属性,省略ext,您可以使用类似的内容:

  • project.myExtProp
  • myExtProp

在您的情况下,您可以使用:

compileSdkVersion project.compileSdkVersion  

因为额外的属性与android属性的名称相同。

只是最后一个考虑因素 在根级别文件中定义类似于:

ext {
   compileSdkVersion=26
}

您要将额外属性添加到rootProject对象 这意味着在您的module / build.gradle文件中,您可以使用rootProject.ext

来检索此值
android {
    compileSdkVersion rootProject.ext.compileSdkVersion
}