我们应该如何处理由于离线 p2p 安装而导致的 Android App Bundle Resources$NotFoundException 崩溃?

Posted

技术标签:

【中文标题】我们应该如何处理由于离线 p2p 安装而导致的 Android App Bundle Resources$NotFoundException 崩溃?【英文标题】:How are we supposed to handle Android App Bundle Resources$NotFoundException crashes due to Offline p2p installs? 【发布时间】:2019-08-10 00:05:07 【问题描述】:

使用 android App Bundle,从 Play 商店安装应用的设备只会收到他们需要的资源。

同时,Google 也在推进他们的离线 p2p 应用共享,使用“ShareIt”和“Files Go by Google”应用。 https://android-developers.googleblog.com/2018/10/offline-p2p-installs-beta.html

我们的应用程序使用了一些 .png 图像,这些图像具有从 ldpi 到 xxxhdpi 的每个 drawable-dpi 的资源,但即便如此,由于捆绑 apk 与设备脱机共享,我们已经开始收到大量 Resources$NotFoundException 崩溃需要不同的资源。

搜索解决方案后,我只找到了来自 Google Play 开发者的答案:

我怀疑从长远来看,网站和 P2P 共享程序会 更好地正确共享此类 APK,所以我不会花太长时间 担心它。

Android App Bundle introduces Resource Not found crash in Android app

App sometimes crashes with Resources$NotFoundException after switching to android app bundle distribution

与此同时,由于在我们切换到 App Bundle 后 Resources$NotFoundException 崩溃的数量缓慢上升,我们的 Play 控制台崩溃统计数据越来越接近“不良行为阈值”。大约 1% 的用户似乎在离线共享应用。

我们现在能想到的唯一避免这种情况的解决方法是:

在应用启动时,检查应用的 packageManager.getInstallerPackageName 是否为“com.android.vending”,这意味着它来自 Play 商店,如果不是,则将它们重定向到从 Play 商店重新安装,这可确保 Play 商店为该设备提供正确的捆绑资源。然而,这完全抵消了离线 p2p 应用共享的优势。

恢复使用 apk 而不是 app bundle。

第三种选择可能是确保所有图像资源都是与 dpi 无关的矢量可绘制对象,但这不太现实,因为图像资源并不总是足够简单以成为矢量可绘制对象。

是否有更优雅或推荐的方法来处理 Android App Bundles 和离线 p2p 应用共享的 Resources$NotFoundException 问题,或者有没有人遇到更好的解决方法来帮助防止它们?

【问题讨论】:

目前,您可以disable splitting on screen density,但我们 (Google) 正在研究一种可以完全防止崩溃的解决方案。我们正在完成测试并将很快发布。 【参考方案1】:

您应该能够在 Play 控制台中过滤“从 Play 安装”或“从任何地方安装”来源的崩溃报告。如果这些应用不是从 Play 安装的,那么它不会影响您的不良行为阈值 Vitals 评分。

如果应用是从 Play 安装的,则不应发生 ResourceNotFound 异常。如果仅查看从 Play 安装的应用程序时 ResourceNotFound 发生崩溃,那么这是一个错误。

请使用 Play 管理中心的帮助(问号)图标向 Play 管理中心开发者支持报告

【讨论】:

啊我不知道非播放安装崩溃不会影响生命体征,很高兴知道! ? Play 的安装不会发生异常,只有当这些安装是共享的时才会发生。在我们看到他们的解决方案发布之前,我们决定接受 Pierre 的建议作为妥协,因为我们仍然希望我们的离线 p2p 安装用户拥有一个可用的应用程序。【参考方案2】:

您必须手动检查应用程序是否通过播放商店或侧载安装。 PackageManager 类提供getInstallerPackageName() 方法,该方法将告诉您安装您指定的包的包名。侧面加载的应用程序将不包含值。如需参考,请查看this。这种崩溃只会发生一次,即第一次。

【讨论】:

以上是关于我们应该如何处理由于离线 p2p 安装而导致的 Android App Bundle Resources$NotFoundException 崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

在 TextReconiger 上实例化期间,我如何处理由于 Google Ocr lib 而导致的应用程序中的本机崩溃?

谷歌地图使城市无需使用地理编码器即可点击(适用于离线模式)

如何处理由于从 Firestore DB 检索而多次运行的 UseEffect?

如何处理由上传有问题的 JPEG 引起的错误?

如何下载离线Adobe软件教程

如何处理由 setattr() 创建的属性?