【问题标题】:How to Dynamically Create or Set a BuildConfigField for Android Studio Using Gradle Command Line如何使用 Gradle 命令行为 Android Studio 动态创建或设置 BuildConfigField
【发布时间】:2022-09-27 21:13:50
【问题描述】:

我知道如何创建一个 buildConfigField 变量并在我的 build.gradle 文件中设置它的值。例如。 buildConfigField \'String\', \'BUILD_VALUE\', \'HELLO WORLD\'

我也知道如何通过任务从 gradle 命令行传入一个参数。例如,如果我在终端中执行./gradleW propertyTypes -Dargs=test1 -Pargs=test2 并在我的build.gradle 中有以下内容:

task propertyTypes(){
    doLast{
        if (project.hasProperty(\"args\")) {
            println \"Project property [\"+project.getProperty(\"args\")+\"]\"
        }
        println \"System property [\"+System.getProperty(\"args\")+\"]\"
    }
}

它会将test2test1 输出到终端。

但是,我不知道如何将它们放在一起。我希望能够通过 gradle 命令行传入一个参数(例如 \"Hello World\"),然后将其设置为 buildConfigField 以供程序本身使用。但是,当我尝试时,要么任务不知道 buildConfigField 是什么,要么 buildConfigField 不知道传递给任务的属性。

关于如何完成这项工作的任何见解?

  • android { android.applicationVariants.all { variant -> variant.buildConfigField \"String\", \'BUILD_VALUE\', \"\\\"${getArgsValueSomehow()}\\\"\" } } getArgsValueSomehow 在哪里返回一些字符串?
  • 是的,那是我不知道怎么写的部分。它的getArgsValueSomehow-ness。

标签: android gradle command-line parameters arguments


【解决方案1】:

这个答案对我有用:

https://stackoverflow.com/a/65150777/5026136

转述:

步骤1:创建一个变量来保存 gradle.properties 文件中的默认值

MY_VAR=defaultValue

第2步:android->defaultconfig 块内的应用程序 build.gradle 文件中创建一个名为 [VAR_NAME] 的 buildConfigField 变量。对于它的值,使用下面的语法给它你放入gradle.properties 的变量:

android {
    defaultConfig {
        buildConfigField "String", "VAR_NAME", "\"$MY_VAR\""
    }

第 3 步:重建项目。 (除非您这样做,否则您将无法访问代码中的新 BuildConfig 变量。)

第4步:根据需要在应用程序代码中使用 BuildConfig.VAR_NAME 变量。

第 5 步:通过将以下标志添加到您的 gradlew 命令行,通过命令行为变量传递一个新值:

-P MY_VAR=new_value

其中new_value 是您决定的任何内容,MY_VAR 是您放入 gradle.properties 文件中的名称。


作为额外的奖励,您可以检查您是否确实能够通过命令行传递一个值,并通过将以下内容添加到您的应用程序的build.gradle(就在android 块之前)来正确更新它:

task output { println "\"$MY_VAR\"" }

(请注意,“输出”只是任务的名称 --- 您可以将其命名为任何名称)

然后,如果您在终端中运行./gradleW output,它将打印MY_VAR 的默认值,就像您在gradle.properties. 中设置的那样

相反,如果您运行./gradleW output -P MY_VAR=new_val,那么它将打印更新后的值!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2015-08-28
    • 1970-01-01
    • 2020-05-28
    • 2015-05-04
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多