是否可以在 Gradle 中声明一个可在 Java 中使用的变量?

是否可以在 Gradle 中声明一个可在 Java 中使用的变量?基本上,我想在build.gradle中声明一些vars,然后在构建时(显然)获得它。就像C/C++中的预处理器宏一样...

声明的一个例子是这样的... :

android {
    debug {
        A_VAR_RETRIEVABLE_IN_JAVA = 42
    }
    release {
        A_VAR_RETRIEVABLE_IN_JAVA = 42+52
    }
}

有没有办法做这样的事情?


答案 1

这里有两种方法可以从Gradle传递值以在Java中使用;

生成 Java 常量

android {
    buildTypes {
        debug {
            buildConfigField "int", "FOO", "42"
            buildConfigField "String", "FOO_STRING", "\"foo\""
            buildConfigField "boolean", "LOG", "true"
        }

        release {
            buildConfigField "int", "FOO", "52"
            buildConfigField "String", "FOO_STRING", "\"bar\""
            buildConfigField "boolean", "LOG", "false"
        }
    }
}

您可以使用以下命令访问它们BuildConfig.FOO

生成安卓资源

android {
    buildTypes {
        debug{
            resValue "string", "app_name", "My App Name Debug"
        }
        release {
            resValue "string", "app_name", "My App Name"
        }
    }
}

您可以使用或以通常的方式访问它们@string/app_nameR.string.app_name


答案 2

在 Android 应用程序(Java 和 XML)中使用 Api App Key 的示例

gradle.properties

AppKey="XXXX-XXXX"

build.gradle

buildTypes {
//...
    buildTypes.each {
        it.buildConfigField 'String', 'APP_KEY_1', AppKey
        it.resValue 'string', 'APP_KEY_2', AppKey
    }
}

在 Java 代码中的用法

Log.d("UserActivity", "onCreate, APP_KEY: " + getString(R.string.APP_KEY_2));

BuildConfig.APP_KEY_1

在 xml 代码中的用法

<data android:scheme="@string/APP_KEY_2" />

推荐