使用 Android App Bundle,从 Play 商店安装应用程序的设备只会收到他们需要的资源。
与此同时,谷歌也在推进他们的离线 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 在 Android 应用中引入 Resource Not found crash
切换到 Android 应用程序包分发后,应用程序有时会因 Resources$NotFoundException 而崩溃
与此同时,由于在我们切换到 App Bundle 后 Resources$NotFoundException 崩溃的数量缓慢上升,我们的 Play Console 崩溃统计数据越来越接近“不良行为阈值”。大约 1% 的用户似乎在离线共享应用程序。
我们现在能想到的避免这种情况的唯一解决方法是:
- 在应用程序启动时,检查应用程序的 packageManager.getInstallerPackageName 是否为“com.android.vending”,这意味着它来自 Play 商店,如果不是,则将它们重定向到从 Play 商店重新安装,这样可以确保Play 商店为该设备提供正确的捆绑资源。然而,这完全否定了离线 p2p 应用程序共享的优势。
或者
- 恢复使用 apk 而不是 app bundle。
第三种选择可能是确保所有图像资源都是独立于 dpi 的矢量可绘制对象,但这不太现实,因为图像资源并不总是足够简单以成为矢量可绘制对象。
有没有更优雅或推荐的方法来处理 Android App Bundles 和离线 p2p 应用程序共享的 Resources$NotFoundException 问题,或者有没有人遇到更好的解决方法来帮助防止它们?