簡體   English   中英

如何使用 Kotlin DSL 和插件塊使用 gradle 和 android 選擇性地應用一些插件

[英]How to optionally apply some plugins using Kotlin DSL and plugins block with gradle and android

我想選擇應用一些插件來改善開發時間的構建時間。

我的意思是我有這個:

app/gradle.build.kts

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

但我不想一直應用 firebase crashlytics 插件(以及其他插件,如性能監視器),但如果我嘗試訪問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")訪問 System 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")訪問 System env 變量,但是從 android 工作室中替換這些值目前對我來說有點麻煩,有人可以展示一種更新這些變量的方法嗎?

您無法更新環境( System.getenv() ),它是不可修改的 map。

我該如何使用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>()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM