0

这是一个艰难的问题:假设某个应用程序中包含一个 SDK。这个应用程序在市场上已经有很长一段时间了,但是从最新版本开始就集成了 SDK。因此,客户可以通过两种方式访问​​包含 SDK 的应用程序:

  1. 此人之前没有该应用程序并下载最新版本
  2. 该人已经在没有 SDK 的旧版本中安装了应用程序,并使用 SDK 更新到新版本

现在当应用程序第一次打开时,SDK 如何判断应用程序是安装还是更新?

我想到了一些事情,但没有成功:

  • 人们可以搜索在安装应用程序时创建的文件,并且从那时起从未更改过。只需查看上次修改的字段,您就知道应用程序的安装时间。我在 data/data/ 中找到了 lib 文件,但每次更新应用程序时它都会更新,所以没有用。编辑:导入文件从未被更改过的原因是无法访问文件创建时间,因此我们必须确保 last-modified == 创建时间

  • sdk 应该与 Android 1.6 兼容,因此它是 < API 9,我无法访问 PackageInfo.firstInstallTime 字段。

  • 我认为我无法访问数据/应用程序来查看 apk 本身,但即使我可以,每次更新应用程序时都会替换 apk,所以 last-modified 会给我上次更新的时间,不是安装。

谢谢你的帮助。

4

1 回答 1

0

我想到了几件事:

在共享首选项中存储版本号。调用它第一次安装,如果没有设置值,则设置当前版本号(这只会在第一次安装时发生,可能在 Application 类中)。稍后您可以检查首选项并将其与当前版本进行比较。更新时,您仍将拥有第一个版本代码并将其与当前版本代码进行比较,因为您需要在发布应用更新时增加版本代码。

如果 SDCard 不存在,则在 SDCard 上创建一个文件(最好在 mnt/sdcard/Android/data/com.my.package.name/ 中)。用版本代码或其他东西命名它。然后,您将获得版本代码和创建的时间,以备不时之需。该文件夹的好处是它在更新您的应用程序时仍然存在,但在卸载它时会被删除(缺点:我认为该功能可从 API 级别 8 及更高级别获得,您必须检查)

与文件相同,但在手机内存上的 data/data/com.package.name 文件夹中(数据库也保存在那里,您的应用程序是唯一可以访问它的应用程序 - 除非 root)更新时卸载并保留。

使用数据库助手将版本代码和时间戳存储在里面。DB 助手有一种跟踪数据库版本的方法。

于 2012-07-23T14:28:30.177 回答