【问题标题】:Display the Android application.apk creation date in Application在 Application 中显示 Android application.apk 创建日期
【发布时间】:2014-05-23 16:10:18
【问题描述】:

我正在开发一个 android 应用程序,我想显示 .apk 的版本和日期现在我可以使用 PackageInfo 显示应用程序的应用程序版本,现在我想显示应用程序的创建日期或.apk 创建日期。

【问题讨论】:

  • 当你制作应用程序时,只需将当前日期放在一个常量中,然后在应用程序中读取它。
  • @Pietu1998 好的,我可以得到当前日期,但我怎样才能让它保持不变。
  • 我的意思是,每当您构建 APK 时,只需将日期放入一个常量 (public static final String) 自己,并让您的应用程序使用该值。如果你把它放在一个足够简单的文件中,你也可以自动完成,比如this one
  • @Pietu1998 我得到了答案
  • Kotlin 示例(准备使用):stackoverflow.com/a/57689199/2098595

标签: android date


【解决方案1】:

对于新读者:

public static String getAppTimeStamp(Context context) {
        String timeStamp = "";

        try {
            ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0);
            String appFile = appInfo.sourceDir;
            long time = new File(appFile).lastModified();

            SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        timeStamp = formatter.format(time);

        } catch (Exception e) {

        }

        return timeStamp;

    }

https://stackoverflow.com/a/2832419/1968592

【讨论】:

  • 这使用 APK 所在的目录。而不是 apk 本身。但我想这没关系,因为文件夹的修改时间会随着 apk 的变化而变化。
  • @Yetti99 注意到,这是 apk 目录上的时间戳,而不是 apk 文件上的时间戳。这使它成为安装日期。正如stackoverflow.com/questions/7607165/… 所讨论的那样,我终于在 BuildConfig.java 文件中添加了一个时间戳。
【解决方案2】:

检查classes.dex的最后修改日期的方法,这意味着你的应用程序代码的最后一次构建时间:

 try{
 ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), 0);
 ZipFile zf = new ZipFile(ai.sourceDir);
 ZipEntry ze = zf.getEntry("classes.dex");
 long time = ze.getTime();
 String s = SimpleDateFormat.getInstance().format(new java.util.Date(time));

 }catch(Exception e){
 }

【讨论】:

  • 这不再适合我。以前是这样,现在不行了。不知道从什么时候开始的。
  • @DanielF stackoverflow.com/a/7608719/934646 那里讨论过,为什么这段代码不起作用,我也在找同样的
  • 这段代码返回的具体时间是多少?开发者创建“classes.dex”文件的时间?是否可以用来唯一确定 APK 是否正确,并有简单的线索来验证 2 个 APK 是否相同?
【解决方案3】:

我使用与 Irshad Khan 和 Pointer Null 相同的策略,但我更喜欢 MANIFEST.MF 文件。 即使修改了布局,也会重新生成这个(classes.dex 不是这种情况)。 我还强制将日期格式化为 GMT,以避免终端和服务器 TZ 之间的混淆(如果必须进行比较,例如:检查最新版本)。

结果如下:

  try{
     ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), 0);
     ZipFile zf = new ZipFile(ai.sourceDir);
     ZipEntry ze = zf.getEntry("META-INF/MANIFEST.MF");
     long time = ze.getTime();
     SimpleDateFormat formatter = (SimpleDateFormat) SimpleDateFormat.getInstance();
     formatter.setTimeZone(TimeZone.getTimeZone("gmt"));
     String s = formatter.format(new java.util.Date(time));
     zf.close();
  }catch(Exception e){
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多