Gradle - 在buildscript依赖项中添加条件类路径

8

我已经升级到Android Studio 2.2,它默认使用Gradle插件v2.2.0,对于调试来说更加优秀。但是为了分发目的,我仍然必须使用v2.1.3。我考虑在项目gradle脚本中添加条件命令,但我不确定如何操作。

以下测试成功:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        if (project.name.startsWith("X"))
        {
            classpath 'com.android.tools.build:gradle:2.1.3'
        }
        else
        {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
    }
}

但我需要它成为类似以下的东西:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        if (IS_RELEASE_VERSION)
        {
            classpath 'com.android.tools.build:gradle:2.1.3'
        }
        else
        {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
    }
}

我无法想出如何做到这一点。 提前致谢。


我想不出任何能使这成为可能的方法。真正的问题在于:为什么你要在发布中使用旧版本? - Xaver Kapeller
我们在发布中使用了一个额外的插件,它只与2.1.3版本兼容。 - lionscribe
那么你可能必须坚持使用旧版本。你不能在调试和发布构建中使用不同的版本。如果是关于build.gradle中的其他内容 - 比如库版本或某些设置 - 那就不是问题了。但是buildscript依赖项实际上是构建脚本本身的依赖项。调试和发布构建的概念是由构建脚本定义的,只有在加载buildscript依赖项之后才能评估它。 - Xaver Kapeller
然而我可以想到一个解决方法:您可以在构建服务器上注入一个参数,并在if语句中使用它。在开发机器上,您可以在家目录下的.gradle.properties文件中将参数设置为开发版本。然而,这并不是一个很好的解决方案...但它可以工作。 - Xaver Kapeller
@XaverKapeller 谢谢你的帮助。这让我思考了一下。我刚刚发布了一个简单有效的答案。 - lionscribe
显示剩余4条评论
1个回答

9

我相信我已经解决了问题,而且方法很简单。你需要检查gradle.startParameter.taskNames属性。这是我的代码:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        if (gradle.startParameter.taskNames.size() > 0 && gradle.startParameter.taskNames.get(0).contains("Release"))
        {
            classpath 'com.android.tools.build:gradle:2.1.3'
        }
        else
        {
            classpath 'com.android.tools.build:gradle:2.2.0'
        }
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

目前它运作良好。如果您愿意,您可以将“发布”值更改为口味变体(如果您正在使用变体)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接