kotlin - 如何使用 Kotlin DSL 选择性地应用一些插件以及使用 gradle 和 android 的插件 block

标签 kotlin gradle gradle-kotlin-dsl

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

我的意思是我有这个:

app/gradle.build.kts:

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

但我不想一直应用 firebase crashlytics 插件(以及其他插件,如 perf monitor),但是如果我尝试访问 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") 访问系统环境变量,但是从 android studio 替换这些值目前对我来说有点老套,有人可以展示一种方法更新那些变量?

  2. 如何使用 project.hasPropperty("") 实现?

最佳答案

你不能。插件 DSL 限制了你能做什么和不能做什么。这记录在 Limitations of the plugins 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>()

I can access the System env variables with System.getenv("CI") but replacing those values from android studio is a little bit hacky currently to me, someone can show a way to update those variables?

你不能更新环境(System.getenv()),它是一个不可修改的映射。

How can I do it using 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>()
}

关于kotlin - 如何使用 Kotlin DSL 选择性地应用一些插件以及使用 gradle 和 android 的插件 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62579114/

相关文章:

java - Gradle 不知道自定义自动配置库 - 测试在 Gradle 中失败,但在 IDE 中成功

android - 如何在 gradle 中添加 Android 归档的传递依赖

gradle - 使用 build.gradle.kts 发布到 mavenLocal

spring-boot - 如何使用Gradle Kotlin DSL对Spring Boot应用程序进行Docker化

gradle - Gradle Kotlin:找不到net.sf.saxon:saxon-HE:9.9.0-2

generics - 如何在kotlin中将通用 map 分配为父类(super class)

kotlin - Kotlin对象表达式无法按预期工作

android-studio - Gradle 任务未显示在 Android Studio 4.2 的 gradle 工具窗口中

multithreading - 在 Kotlin 协程上运行阻塞的 CPU 绑定(bind)任务

java - smoothScrollTo(position) 滚动到底部而不是 RecyclerView 中的目标位置