Android 如何访问Gradle中的ext变量

Android 如何访问Gradle中的ext变量,android,gradle,build.gradle,crashlytics,Android,Gradle,Build.gradle,Crashlytics,我试图让在第三方库(fabric)中定义的变量根据是否启用Crashlytics执行条件 ext.enableCrashlytics = true android.applicationVariants.all { variant -> ... //create fabric.properties ... } 该变量可以在buildTypes或flavors中配置,但我在build.gradle的其他地方找不到访问它的方法 我尝试了好几件事,但都没有成功 allproje

我试图让在第三方库(fabric)中定义的变量根据是否启用Crashlytics执行条件

ext.enableCrashlytics = true
android.applicationVariants.all { variant ->
  ...
  //create fabric.properties
  ...
}
该变量可以在buildTypes或flavors中配置,但我在build.gradle的其他地方找不到访问它的方法

我尝试了好几件事,但都没有成功

allprojects.getProperties().get("enableCrashlytics")
project.enableCrashlytics
project.ext.enableCrashlytics
allProjects.ext.enableCrashlytics
以前有人试过吗?我尝试这样做的上下文是基于是否启用fabric.properties文件来编写该文件

ext.enableCrashlytics = true
android.applicationVariants.all { variant ->
  ...
  //create fabric.properties
  ...
}

您可以在顶级
build.gradle
中定义属性:

ext {
  myproperty = 12
}
或数组:

ext {

    myarray = [
            name0     : "xx",
            name1     : "xx"
   ]
}
然后,在每个模块中,您都可以使用类似以下内容:

rootProject.ext.myproperty
rootProject.ext.myarray.name0

我知道这个问题由来已久,但我在尝试做类似的事情时偶然发现了它

经过反复试验和阅读构建系统源代码后,我找到了答案

variants.all { variant ->
     println("${variant.name.capitalize()}")
     println(variant.getBuildType().myFoo)
     println("------")
}
有了它,您将能够从不同的变体中读取ExtraPropertiesExtensions

我的输出:

Debug
true
------
Release
true
------
Something
false
------
以下是我查找的文件,以找出问题:

project.hasProperty“propName”


(在groovy中,如果可能,参数是可选的,首选“String”而不是“GString”)

在第三方库中定义变量库中如何定义变量?这是一个gradle脚本吗?你在构建脚本中使用的
apply from:
?我猜这是Crashlystic的build.gradle中的内容,因为这就是从他们的网站上禁用它的方法!是的,我也尝试过这种语法,但问题是我不是定义变量的人,我只是启用或禁用了标志,但变量是在他们的构建中定义的。我猜是gradle!?如果我尝试使用rootProject.ext.enableCrashlytics访问它,则会出现以下错误“错误:(272,0)无法在额外属性扩展上获取属性'enableCrashlytics',因为它不存在”。您应该在顶级build.gradle中定义ext.enableCrashlytics。使用crashlitycs,您将导入一个不包含gradle文件的依赖项(aar)。好的,在顶级build.gradle中定义它,我可以使用println“enableCrashlytics:+variant.name.capitalize()+”::“+rootProject.ext.enableCrashlytics打印该值,尽管它不在乎是否有一种风格禁用它。即使我将其中一个flavor设置为ext.enableCrashlytics=false,它也会为每个变体打印true。我错过什么了吗?