是否可以通过编程方式读取我的 Android apk 的构建日期?我在 PackageInfo 类中找不到任何内容。
我想使我的应用程序的 beta 版本过期,最简单的方法是读出这样的日期并在几天的修复前使其过期,因此我不必在每次构建时更新代码并部署测试版。
最佳答案
注 6/1/2020:Android Studio 4.1 Canary 10 w/Gradle >= 6.5 已更新说明。如果您看到“Unsupported BuildConfig type : java.util.Date
错误,请向下滚动以进行修复。
[旧指令]
在 build.gradle
中,您的每个 build types应该有一个 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
”的newer version。)
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 随意格式化日期。)
更新 6/1/2020 -- 在 Android Studio 4.1 Canary 10 w/Gradle 6.5 中,上述解决方案导致“Unsupported BuildConfig type : java.util.Date
”错误。一个 slight variation应改为使用上述内容:
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 随意格式化日期。 .
希望这有帮助。
https://stackoverflow.com/questions/3540739/
相关文章:
go - 如何使用 Golang 包以外的名称构建可执行文件
xcode - 无法将 testflight 与从 XCode 7.0.1 上传的构建一起使用
python - 问题构建 cx_Oracle - libclntsh.so.11.1 => 未找到
android - com.android.ddmlib.AdbCommandRejectedExc
visual-studio-2010 - 无法使用 devenv 编译 vdproj - 'targ
android - 使用没有运行的 Eclipse 重建 .apk
iphone - 为什么 Xcode 会在钥匙串(keychain)中自动安装(重复和过期的)证书?