我们应该如何处理由于离线 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 而导致的应用程序中的本机崩溃?