是否可以以编程方式读取我的 Android apk 的构建日期?我在 PackageInfo 类中找不到任何内容。
我想使我的应用程序的 beta 版本过期,最简单的方法是读出这样的日期并在几天的修复前使其过期,因此我不必每次构建和部署时都更新代码测试版。
注意 2020 年 6 月 1 日:Android Studio 4.1 Canary 10 w/Gradle >= 6.5 已更新说明。如果您看到 "Unsupported BuildConfig type : java.util.Date
错误,请向下滚动以进行修复。
[旧说明]
在build.gradle
中,您的每个构建类型都应该有一个buildConfigField
. (这是配置的简化版本——你可能在这里有其他东西,但我想展示你把它放在哪里):
android {
signingConfigs {
buildTypes {
debug {
buildConfigField "java.util.Date", "BUILD_TIME", "new java.util.Date(" + System.currentTimeMillis() + "L)"
}
release {
buildConfigField "java.util.Date", "BUILD_TIME", "new java.util.Date(" + System.currentTimeMillis() + "L)"
}
}
}
}
(请注意,“ BuildConfigField
”是0.8.0 构建系统中“ ”的较新版本。)BuildConfigLine
下次 gradle 执行 assembleRelease 或 assembleDebug 时,它应该生成:
./build/source/buildConfig/releaseORdebug/com/your/project/BuildConfig.java
接下来,在该BuildConfig
文件中,您应该会看到自动生成的内容,例如:
public final class BuildConfig {
public static final java.util.Date BUILD_TIME = new java.util.Date(1395794838381L);
}
因此,要在您的应用程序中访问构建日期......
Date buildDate = BuildConfig.BUILD_TIME;
Log.i("MyProgram", "This .apk was built on " + buildDate.toString());
(您可以使用SimpleDateFormat随意格式化日期。)
2020 年 6 月 1 日更新——在 Android Studio 4.1 Canary 10 w/Gradle 6.5 中,上述解决方案导致“ Unsupported BuildConfig type : java.util.Date
”错误。应使用对上述内容的轻微变化:
android {
signingConfigs {
buildTypes {
debug {
buildConfigField("String", "BUILD_TIME", System.currentTimeMillis().toString())
}
release {
buildConfigField("String", "BUILD_TIME", System.currentTimeMillis().toString())
}
}
}
}
2020 年 7 月 30 日更新 在 gradle 6.6-rc4 之后,您需要通过更改为以下行来包含当时的引号:
buildConfigField("String", "BUILD_TIME", "\"" + System.currentTimeMillis().toString() + "\"")
在BuildConfig
文件中,您应该看到现在已经自动生成了一些内容,例如:
public final class BuildConfig {
public static final String BUILD_TIME = "1590735284503";
}
所以现在,要在您的应用程序中访问构建日期......
private Date buildDate = new Date(Long.parseLong(BuildConfig.BUILD_TIME));
Log.i("MyProgram", "This .apk was built on " + buildDate.toString());
和以前一样,您可以使用SimpleDateFormat随意格式化日期。
希望这会有所帮助。