将时间戳系统属性从Gradle传递到Android(Java)应用程序

时间:2013-10-11 11:46:06

标签: android gradle android-gradle

我希望我的Android应用程序在运行时知道应用程序的构建时间。我是Gradle的新手,但它似乎非常灵活,我认为有可能在没有任何外部帮助程序或令牌替换的情况下实现这一点。

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

以下内容将为您的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

不确定为什么你想在应用程序中知道这一点。我认为使用版本控制系统的版本号或散列可能比日期更有意义。