10

当 Play 商店更新应用程序时,设备上的工作流程是什么?如果用户同时使用该应用程序会发生什么?

我问是因为我们遇到了一些无法找到字符串 ID 的崩溃,并且当我们查看 APK 时,字符串资源在两个版本中都可用 - 但崩溃中报告的十六进制 ID 在旧 apk 中而不是在新 apk 中找到一。这很奇怪。

这导致我们认为 Play 商店可能在应用程序运行时更新了应用程序的文件和资源,然后当它查找字符串资源以加载某些内容时,它使用了内存中的旧 ID,当然没有找到它在新更新的文件中.. 导致 ResourceNotFound 异常。

这怎么可能?甚至可能吗?我认为不会,除非我们查看了 APK,并且崩溃中的 ID 与旧资源 ID 匹配,而不是我们刚刚推送的新资源 ID。

4

3 回答 3

1

从我在研究中发现的情况来看,似乎需要关闭应用程序才能访问文件以进行更新。关闭后,Google Play 仅更新 apk 的更改部分以节省时间和成本。

我发现有几个论坛帖子教你如何从闪存 ROM 回滚应用程序选项(这种情况一直发生在有根设备的情况下)。也许用户在收到更新后尝试回滚。要么是那个,要么是崩溃中的 ID 在您的 apk 的一部分中被引用,但未更新。

来源: 更新通知

更新应用程序时会发生什么

Google Play 节省成本和时间

于 2013-07-19T19:14:52.103 回答
0

如果用户在更新应用程序的同时使用该应用程序,则 linux 文件系统允许上述行为。即使磁盘上的可执行文件已更新,保持文件打开的进程(认为应用程序运行时应用程序可执行文件)会将可执行文件映像保留在内存中。这允许将新的 apk 放置到位并与仍在内存中的旧 exe 映像一起解压缩。

资源文件往往是延迟加载的,因此在内存中导航旧图像将查找资源并可能从新解包的应用程序中加载资源。该资源可能与旧应用程序不兼容并导致崩溃。

于 2013-07-19T22:38:39.620 回答
0

我记得遇到过这样的问题——在我的情况下,问题是我们通过用户偏好存储资源 ID(甚至是序列化的枚举值)。一旦我们的应用程序更新(新的枚举值、新资源),旧值就会从用户偏好中加载并传递到代码中,从而导致崩溃。

也许这不是您的问题,但值得检查一下您是否没有为不再存在的资源存储/加载 ID。

于 2014-09-29T21:04:03.380 回答