当使用包管理器 API 更新 Android 应用程序时,它是否可能会进入这样的状态:该应用程序具有来自较新版本的应用程序的数据文件,但仍安装并运行较旧版本的应用程序电话?
我正在诊断客户返回的手机上的 Android 应用程序,该应用程序是使用 Realm 1.0.0 数据库开发的。由于某种原因,该应用程序似乎无法更新到我们软件的新版本。该应用程序的较新版本具有架构 v4。该应用程序的旧版本具有架构 v3。我们不使用 Play 商店来分发升级。我们有自己的 Web 服务器,应用程序会在其中下载自身的 APK 文件升级,然后通过调用包管理器来安装这些文件,其 Intent 如下:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
当应用程序启动时,它崩溃并出现以下错误:
Realm on disc is newer then the one specified. V4 vs V3.
如果我查看“设置”>“应用程序”,我可以看到安装的应用程序是使用我们架构的 V3 的旧版本。然而,应用程序从内部存储加载的 .realm 文件具有属于我们应用程序较新版本的 v4 架构。
该应用程序在运行 Lollipop 5.0.2 的 Moto E2 手机上运行。
最佳答案
听起来有些用户很可能降级了您的应用程序?
Realm 不支持自动降级 Realm 文件。如果您希望允许降级,您仍然需要将架构版本提升到下一个级别:4 -> 5,并将那里的迁移指定为 3 -> 4 的倒数。
考虑到您的场景听起来不可能,因为我假设用户可以降级到任何以前的版本?
在这种情况下,您有两个选择:
1) 通过捕获异常来检测降级是否发生,并向用户显示无法降级的警告。
2) 检测到发生降级并删除 Realm 文件。
关于Android Realm 迁移问题: Can an older version of an app get stuck with the data files of a newer version?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745314/