android - 如何以编程方式读取我的 Android apk 的构建日期?

是否可以通过编程方式读取我的 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 => 未找到

build-process - 改进您的构建过程

android - com.android.ddmlib.AdbCommandRejectedExc

visual-studio-2010 - 无法使用 devenv 编译 vdproj - 'targ

android - 使用没有运行的 Eclipse 重建 .apk

iphone - 为什么 Xcode 会在钥匙串(keychain)中自动安装(重复和过期的)证书?

build - Xcode 4 术语 "Build for testing/Build for ru

python - Matplotlib 构建问题 : Error C1083: Cannot ope