Android应用程序崩溃并显示“ResourceNotFoundException”错误

12

我最近查看了我的GP崩溃日志,我经常得到这个调用堆栈。你能帮我解决一下吗?

以下是一些事项:

  • failed to add asset path有时会显示/data/app/com.xxx.xxx.xxx-x/base.apk,有时会显示/mnt/asec/com.xxx.xxx.xxx-x/base.apk
  • 报告的设备Android版本(如果有)从Android 4.4变化到Android 7.0不等。
  • 在GP控制台中,所有崩溃的Android版本都显示为Android 7.0,但设备列表中存在具有Android版本 6.0、5.0等的设备,这很不清楚。
  • 我有两个共享用户ID的应用程序,分别称为P1、P2。对于P1,failed to add asset path有时会显示/data/app/P2,有时会显示/mnt/asec/P1。这不正确,可能是什么原因呢?

调用堆栈:

java.lang.RuntimeException: Unable to create BackupAgent android.app.backup.FullBackupAgent: android.content.res.Resources$NotFoundException: failed to add asset path data/app/com.P2.xxx/base.apk
    at android.app.ActivityThread.handleCreateBackupAgent(ActivityThread.java:3452)
    at android.app.ActivityThread.-wrap5(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1796)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6688)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: android.content.res.Resources$NotFoundException: failed to add asset path /data/app/com.P2.xxx/base.apk
    at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:281)
    at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:359)
    at android.app.ResourcesManager.getOrCreateResources(ResourcesManager.java:638)
    at android.app.ResourcesManager.getResources(ResourcesManager.java:730)
    at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2068)
    at android.app.LoadedApk.getResources(LoadedApk.java:780)
    at android.app.ContextImpl.<init>(ContextImpl.java:2244)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2184)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2175)
    at android.app.ActivityThread.handleCreateBackupAgent(ActivityThread.java:3422)

另一次崩溃:

android.content.res.Resources$NotFoundException: failed to add asset path /mnt/asec/com.P1.xxx/base.apk
    at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:281)
    at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:359)
    at android.app.ResourcesManager.getOrCreateResources(ResourcesManager.java:638)
    at android.app.ResourcesManager.getResources(ResourcesManager.java:730)
    at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2052)
    at android.app.LoadedApk.getResources(LoadedApk.java:787)
    at android.app.ContextImpl.<init>(ContextImpl.java:2266)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2210)
    at android.app.ContextImpl.createAppContext(ContextImpl.java:2196)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5861)
    at android.app.ActivityThread.-wrap3(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1710)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)

你的资源里有什么?请发布你的清单。是某个特定设备引发了这个异常吗? - Muhammad Babar
无法创建BackupAgent,提示用户可能正在尝试备份应用数据(您的清单可能具有“allowBackup = true”,并且您是否允许应用安装在外部存储上?) - Muhammad Babar
它可以在多个设备上使用,如三星Galaxy 6、7、Xperia等。主应用程序的allowbackup为false,但对于某些子模块而言是true,尽管在主应用程序清单中,tools:replace覆盖了allowBackup。因此,它变成了false。 - thepace
是的,它可以安装在外部存储设备中。 - thepace
1
我被困扰着看着"E/ResourcesManager( 2375): failed to add asset path /data/app/<myprog>-sHDd-VYemA3rocflBxq8QA==/base.apk",其中sHDd-VYem...是路径到最近卸载的<myprog>.apk!没有外部存储,没有备份,什么都没有。而且清单就像一滴眼泪一样清晰。 - avs333
2个回答

0
请检查应用程序是否具有外部驱动器权限。在我的情况下,当ADB将应用程序安装到屏幕锁定的设备上时,此问题会触发,而当设备处于唤醒状态时,相同的测试已经通过,因此即使此应用程序具有权限也无法访问。

0

我在使用com.android.billingclient:billing时遇到了错误。问题是“设备中没有帐户”,例如新设备或恢复出厂设置。

因此,只需在全局设置中添加一个帐户即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接