如何选择性地使用 Kotlin DSL 应用一些插件,并使用 gradle 和 android 应用插件块



我想选择性地应用一些插件来缩短开发时间的构建时间。

我的意思是我有这个:

app/gradle.build.kts

plugins {
id("com.android.application")
id("com.google.firebase.crashlytics")
}

但是我不想一直应用 firebase crashlytics 插件(以及其他插件,如 perf 监视器(,但是如果我尝试访问plugins块内的project,我会得到:

plugins {
id("com.android.application")
if (!project.hasProperty("build_fast")) {
id("com.google.firebase.crashlytics")
}
}

我得到:

'val Build_gradle.project: Project' can't be called in this context by implicit receiver. Use the explicit one if necessary

所以我的问题是:

  1. 我可以使用System.getenv("CI")访问系统 env 变量,但目前从 android 工作室替换这些值对我来说有点麻烦,有人可以展示一种更新这些变量的方法吗?

  2. 如何使用project.hasPropperty("")来做到这一点?

你不能。插件DSL在你能做什么和不能做什么方面受到限制。这记录在插件DSL的限制中。

要有条件地应用插件,您必须使用Project.apply(T)

plugins {
id("com.android.application")
id("com.google.firebase.crashlytics") apply false
}

apply false是必需的,因为我们不想应用插件,但我们想要该插件可用的类型或类,以便我们可以以编程方式以类型安全的方式应用插件。

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsPlugin
plugins {
id("com.android.application")
id("com.google.firebase.crashlytics") apply false
}
apply<CrashlyticsPlugin>()

我可以使用System.getenv("CI")访问系统 env 变量,但目前从 android 工作室替换这些值对我来说有点麻烦,有人可以展示一种更新这些变量的方法吗?

您无法更新环境(System.getenv()(,这是一个不可修改的地图。

如何使用project.hasPropperty("")

将其用作您已完成的条件:

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsPlugin
plugins {
id("com.android.application")
id("com.google.firebase.crashlytics") apply false
}
if (!hasProperty("build_fast")) {
apply<CrashlyticsPlugin>()
}

最新更新