2

当使用包管理器 API 更新 Android 应用程序时,它是否有可能进入应用程序具有来自较新版本应用程序的数据文件但仍安装并在手机上运行旧版本应用程序的状态?

我正在诊断使用 Realm 1.0.0 数据库开发的客户返回的手机上的 Android 应用程序。由于某种原因,该应用程序似乎无法更新到我们软件的较新版本。该应用程序的较新版本具有架构 v4。该应用程序的旧版本具有架构 v3。我们不使用 Play 商店分发升级。我们有自己的网络服务器,应用程序会在其中下载自身的 APK 文件升级,然后通过调用包管理器来安装这些升级文件,其意图如下:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);

当应用程序启动时,它会崩溃并出现以下错误:

光盘上的领域比指定的领域更新。V4 与 V3。

如果我查看设置 > 应用程序,我可以看到安装的应用程序是使用我们架构的 V3 的旧版本。然而,应用程序从内部存储加载的 .realm 文件具有属于我们应用程序的较新版本的 v4 模式。

该应用程序在运行 Lollipop 5.0.2 的 Moto E2 手机上运行。

4

1 回答 1

2

听起来有些用户最有可能降级了您的应用程序?

Realm 不支持自动降级 Realm 文件。如果您希望允许降级,您仍然需要将架构版本提升到下一个级别:4 -> 5,并将那里的迁移指定为 3 -> 4 的倒数。

鉴于您的情况听起来不可能,因为我假设用户可以降级到任何以前的版本?

在这种情况下,您有两种选择:

1)通过捕获该异常来检测降级发生并向用户显示他们无法降级的警告。

2) 检测到降级发生并删除领域文件。

于 2016-09-29T12:22:41.030 回答