前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android插件ResourcesNotFoundException

Android插件ResourcesNotFoundException

作者头像
None_Ling
发布2018-12-21 15:12:34
1.4K0
发布2018-12-21 15:12:34
举报
文章被收录于专栏:Android相关

背景

之前遇到过一种ResourceNotFoundException,是因为在WebView初始化的时候,AssetManager被重新创建了,所有被添加的插件APK路径都被清空了,所以导致资源找不到。

而这一次遇到了一个Crash却是资源路径还在,但是Context无法找到该资源的问题,日志如下:

代码语言:javascript
复制
11-30 13:11:31.701 1250-1338/? A/WindowManager: Unhandled exception while laying out windows
    android.content.res.Resources$NotFoundException: Resource ID #0x7a04001d
        at android.content.res.Resources.getValue(Resources.java:1375)
        at android.content.res.Resources.loadXmlResourceParser(Resources.java:2894)
        at android.content.res.Resources.getAnimation(Resources.java:1191)
        at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:73)
        at com.android.server.wm.OppoAppTransition.loadAnimation(OppoAppTransition.java:192)
        at com.android.server.wm.OppoAppTransition.createOppoCustomAnimLocked(OppoAppTransition.java:376)
        at com.android.server.wm.OppoAppTransition.loadAnimation(OppoAppTransition.java:242)
        at com.android.server.wm.WindowManagerService.applyAnimationLocked(WindowManagerService.java:3804)
        at com.android.server.wm.WindowManagerService.setTokenVisibilityLocked(WindowManagerService.java:4898)
        at com.android.server.wm.WindowManagerService.handleAppTransitionReadyLocked(WindowManagerService.java:9902)
        at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLockedInner(WindowManagerService.java:10669)
        at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLockedLoop(WindowManagerService.java:9461)
        at com.android.server.wm.WindowManagerService.performLayoutAndPlaceSurfacesLocked(WindowManagerService.java:9403)
        at com.android.server.wm.WindowManagerService.access$400(WindowManagerService.java:203)
        at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:8282)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:179)
        at android.os.HandlerThread.run(HandlerThread.java:61)

跟踪问题

  1. 通过Android Studio解开插件的APK确认:
    • 资源的类型
    • 资源的ID
  2. 根据ID找到对应的资源名称确认:
    • 插件的APK中是存在这个资源的
    • AAPT将ID和资源名都打进了resources.arsc中。
  3. 搜索资源的引用:
    • 发现在Activity的Theme中的activityOpenEnterAnimation中使用了该动画
  4. 将该资源替换之后,发现还是报同样的错误
  5. 最后发现在Activity结束的时候,会在overridePendingTransition中使用该资源,导致的Crash

overridePendingTransition

原因

因为在ActivityManagerService带过去的PackageName是主包的PackageName,而不是插件的,所以在主包的resource.arsc中找不到对应的插件资源ID,所以导致的Crash。

解决方案

将使用到的资源,放置到主包即可

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.11.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 跟踪问题
  • 原因
  • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档