如何使用 Gradle 命令行为 Android Studio 动态创建或设置 BuildConfigField

Ell*_*ica 2 parameters command-line android arguments gradle

我知道如何创建 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")+"]"
    }
}
Run Code Online (Sandbox Code Playgroud)

它将输出test2test1到终端。

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

关于如何使这项工作有效的任何见解?

Ell*_*ica 5

这个答案对我有用:

/sf/answers/4560554421/

转述一下:

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

MY_VAR=defaultValue

步骤 2:buildConfigField在块内应用程序的 build.gradle 文件中创建一个名为 [VAR_NAME] 的变量android->defaultconfiggradle.properties对于其值,请为其提供使用以下语法放入的变量:

android {
    defaultConfig {
        buildConfigField "String", "VAR_NAME", "\"$MY_VAR\""
    }
Run Code Online (Sandbox Code Playgroud)

步骤 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\"" }

(Note that "output" is just a name for the task --- you can call it anything)

Then if you run ./gradleW output in terminal, it will print the default value for MY_VAR as you've set it in gradle.properties.

If instead you run ./gradleW output -P MY_VAR=new_val then it will print the updated value!