【问题标题】:Pass timestamp system property from Gradle to Android (Java) application将时间戳系统属性从 Gradle 传递到 Android (Java) 应用程序
【发布时间】:2013-10-11 11:46:05
【问题描述】:

我希望我的 Android 应用程序在运行时知道应用程序的构建时间。我是 Gradle 新手,但它看起来非常灵活,我认为无需任何外部帮助程序或令牌替换即可实现这一目标。

我的想法是在某种 Gradle 预构建任务中计算时间戳字符串。然后我想将此字符串作为系统属性传递给 Java 应用程序。例如:

def timestamp = ...
systemProperty 'my.build.timestamp' timestamp

然后在 Java 中检索运行时的时间戳:

String iWasBuiltAt = System.getProperty("my.build.timestamp");

我将如何编写必要的 Gradle 代码来实现这一目标?更具体地说,在哪里/如何调用我的自定义任务,是否可以按照上述方式添加系统属性。

【问题讨论】:

标签: android gradle android-gradle-plugin


【解决方案1】:

下面会在你的 BuildConfig 类中添加一个buildTime 常量(这个类是由构建系统自动生成的)。

defaultConfig {
    buildConfig  "public final static String buildTime = \"" + new Date() + "\";"
}

在任何 Android Java 文件中,您都可以像这样使用它(构建配置在您必须导入的应用程序的默认包中):

Log.v("foo", "buildtime:" + BuildConfig.buildTime);

您可以使用 groovy 日期格式化函数来设置不同的日期格式。您也可以将其更改为存储纪元毫秒,然后在 Java 中对其进行解析。

defaultConfig 表示这将添加每个buildType 的构建。

在此处阅读有关构建类型、defaultConfig 等的更多信息:http://tools.android.com/tech-docs/new-build-system/user-guide

不知道您为什么想在应用程序中知道这一点。我认为使用版本控制系统的修订号或哈希可能比日期更有意义。

【讨论】:

  • 太棒了!我使用构建时间来确定我的应用的内部“评估”风格的到期日期。
  • buildConfigField "long", "BUILD_TIME_MILLIS", "${System.currentTimeMillis()}L"
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2017-11-06
相关资源
最近更新 更多