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

You*_*jae 3 android gradle android-gradle-plugin

如果我有以下 Android gradle 脚本;

ext {
    compileSdkVersion = 25
}

android {
    compileSdkVersion project.compileSdkVersion 
}
Run Code Online (Sandbox Code Playgroud)
  1. ext {...}与 具有相同的范围吗project.ext {...}

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

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

Gab*_*tti 5

您可以检查文档:

\n\n
\n

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

\n
\n\n

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

\n\n

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

\n\n
    \n
  • project.myExtProp
  • \n
  • myExtProp
  • \n
\n\n

根据您的情况,您可以使用:

\n\n
compileSdkVersion project.compileSdkVersion  \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

只是最后的考虑。
\n在根级别文件中定义如下:

\n\n
ext {\n   compileSdkVersion=26\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
android {\n    compileSdkVersion rootProject.ext.compileSdkVersion\n}\n
Run Code Online (Sandbox Code Playgroud)\n