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

新手上路,请多包涵

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

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

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

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

原文由 klefevre 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 415
2 个回答

以下是从 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 以常规方式访问它们

原文由 rciovati 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

gradle.properties

 AppKey="XXXX-XXXX"

构建.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" />

原文由 Denis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题