android - ext 和 project.ext 在 gradle 中有相同的范围吗?

标签 android gradle android-gradle-plugin

如果我有下面的 Android gradle 脚本;

ext {
    compileSdkVersion = 25
}

android {
    compileSdkVersion project.compileSdkVersion 
}
  1. ext {...} 是否与 project.ext {...} 具有相同的作用域?

  2. 下面两个有相同的作用域吗?

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

最佳答案

您可以 check the doc:

Extra properties
All enhanced objects in Gradle’s domain model can hold extra user-defined properties. This includes, but is not limited to, projects, tasks, and source sets. Extra properties can be added, read and set via the owning object’s ext property. Alternatively, an ext block can be used to add multiple properties at once.

在您的代码中,ext block 向 project 对象添加了两个额外的属性。

此外,extproject.ext 的简写。 要读取额外的属性,ext 被省略,您可以使用类似的东西:

  • project.myExtProp
  • myExtProp

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

compileSdkVersion project.compileSdkVersion  

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

只是最后的考虑。
在根级文件中定义如下内容:

ext {
   compileSdkVersion=26
}

您正在向 rootProject 对象添加额外的属性。
这意味着在您的 module/build.gradle 文件中,您可以使用 rootProject.ext 检索此值:

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
}

关于android - ext 和 project.ext 在 gradle 中有相同的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781976/

相关文章:

android - 将 .NET Standard 类库转换为原生 aar/jar

java - 相同代码在Android Studio中导出的apk比Intellij IDEA大得多

android - 无法获取 'https://jcenter.bintray.com/com/android/tools/build/gradle/4.0.0/gradle-4.0.0.pom'

java - “Cannot find or load main class net.epsilon.app.Main” Java [等级]

android - 将模块 1 中的文件复制到模块 2 中的目录

java - 忽略 String.contain 上的符号

gradle - 无法在 Intellij 中导入 Gradle 的 ShadowJar 插件

android - 如何解决gradle中的模块化依赖

gradle - Android Gradle在运行测试之前跳过构建?

java - 从子类访问方法时出错