首页 > 其他分享 >Caused by: android.content.res.Resources$NotFoundException: File res/drawable/***

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/***

时间:2023-11-24 11:32:32浏览次数:28  
标签:PRODUCT 01 04 res 09 content AAPT Caused android


Caused by: android.content.res.Resources$NotFoundException: File res/drawable/*

1、log显示

01-01 09:04:12.245 D/AndroidRuntime( 2938): Shutting down VM
01-01 09:04:12.255 E/AndroidRuntime( 2938): FATAL EXCEPTION: main
01-01 09:04:12.255 E/AndroidRuntime( 2938): Process: com.android.contacts, PID: 2938
01-01 09:04:12.255 E/AndroidRuntime( 2938): java.lang.RuntimeException: Failure delivering result ResultInfo{who=android:fragment:0, request=1, result=-1, data=Intent { (has extras) }} to activity {com.android.contacts/com.android.contacts.activities.CompactContactEditorActivity}: android.content.res.Resources$NotFoundException: Drawable com.android.contacts:drawable/ic_message_24dp with resource ID #0x7f02004b

“““““`

01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: android.content.res.ResourcesNotFoundException: Drawable com.android.contacts:drawable/ic_message_24dp with resource ID #0x7f02004b  
01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: android.content.res.ResourcesNotFoundException: File res/drawable/ic_message_24dp.xml from drawable resource ID #0x7f02004b
“““““`

01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: requires a valid ‘src’ attribute

01-01 09:04:12.259 I/am_crash( 2143): [2938,0,com.android.contacts,818462277,org.xmlpull.v1.XmlPullParserException,Binary XML file line #17: requires a valid ‘src’ attribute,BitmapDrawable.java,771]
01-01 09:04:12.262 W/ActivityManager( 2143): Force finishing activity com.android.contacts/.activities.CompactContactEditorActivity
01-01 09:04:12.262 I/am_finish_activity( 2143): [0,76646553,23,com.android.contacts/.activities.CompactContactEditorActivity,force-crash]
01-01 09:04:12.267 I/wm_task_moved( 2143): [23,1,0]
01-01 09:04:12.273 I/am_focused_activity( 2143): [0,com.android.contacts/.activities.PeopleActivity,finishActivity adjustFocus]

2、log分析

01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: android.content.res.ResourcesNotFoundException: Drawable com.android.contacts:drawable/ic_message_24dp with resource ID #0x7f02004b  
01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: android.content.res.ResourcesNotFoundException: File res/drawable/ic_message_24dp.xml from drawable resource ID #0x7f02004b

01-01 09:04:12.255 E/AndroidRuntime( 2938): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: requires a valid ‘src’ attribute

这个是app Contact 的代码抛出的NotFoundException异常。

主要原因是:在drawable下的一个xml文件中引用的bitmap对象无效导致资源找不到。

应该可能是相关的drawable文件夾下没有图片资源,还有可能在编码时不小把图片的命名和drawable下xml文件的名字相同了。

android可以区分xml和png文件,关键是在某些情况下:比如公司之前的产品都是hdpi的产品,而最近的项目是小屏的ldpi的,在配置board的时候,直接从原有的board上fork过来了一个board,而PRODUCT_AAPT_CONFIG 依然是hdpi,这就导致编译出来的apk,资源都是只hdpi的。当应用在运行时加载ldpi的资源时,找不到,于是就找附件高分辨率的资源。

假若资源的名字和xml文件相同,这些刚好把drawable目录下的ic_capture_video.xml当成了ic_captrue_video.png(都是drawable/ic_capture_video)所以引用了个无效的bitmap源。假若没有,那就也会抛出找不到资源的NotFoundException异常。

解决思路:
1)、添加相关资源图到APP的drawable 不同类型大小屏幕的文件夹。
2)、不要让资源和文件夹的名字重复。
3)、board配置事实求实,根据dip配置PRODUCT_AAPT_CONFIG

./build/core/product_config.mk

Add PRODUCT_LOCALES to PRODUCT_AAPT_CONFIG
PRODUCT_AAPT_CONFIG := (strip(PRODUCTS.(INTERNALPRODUCT).PRODUCTAAPTCONFIG))PRODUCTAAPTCONFIG:=(PRODUCT_LOCALES) (PRODUCTAAPTCONFIG)PRODUCTAAPTPREFCONFIG:=(strip (PRODUCTS.(INTERNAL_PRODUCT).PRODUCT_AAPT_PREF_CONFIG))

# Default to medium-density assets.
# (Can be overridden in the device config, e.g.: PRODUCT_AAPT_CONFIG += hdpi)
PRODUCT_AAPT_CONFIG := (strip (PRODUCT_AAPT_CONFIG) \
(if(filter %dpi,(PRODUCTAAPTCONFIG)),,mdpi))PRODUCTAAPTPREFCONFIG:=(strip $(PRODUCT_AAPT_PREF_CONFIG))

# Everyone gets nodpi assets which are density-independent.
PRODUCT_AAPT_CONFIG += nodpi

# Convert spaces to commas.
comma := ,
PRODUCT_AAPT_CONFIG := \
(subst(space),(comma),(strip $(PRODUCT_AAPT_CONFIG)))

加入配置
PRODUCT_AAPT_CONFIG := mdpi xlarge hdpi xhdpi large
PRODUCT_AAPT_PREF_CONFIG := mdpi

PRODUCT_AAPT_CONFIG = xxxx 对于资源选择的匹配规则?
原则上来说,优先使用符合设备dpi的资源,其次是dpi较低的高dpi资源,再次是dpi较高的高dpi资源,最后采用nodpi的资源,由此,根据设备自身的dpi的不同,不同dpi资源的优先级是有差异的(忽略mdpi&hdpi):
设备dpi 优先级顺序(由高到低)
tvdpi tvdpi>hdpi>xhdpi>xxhdpi>mdpi>default>ldpi>nodpi
hdpi hdpi>tvdpi>xhdpi>xxhdpi>>mdpi>default>ldpi>nodpi
xhdpi xhdpi>xxhdpi>hdpi>tvdpi>mdpi>default>ldpi>nodpi
xxhdpi xxhdpi>xhdpi>hdpi>tvdpi>mdpi>default>ldpi>nodpi


标签:PRODUCT,01,04,res,09,content,AAPT,Caused,android
From: https://blog.51cto.com/u_15866638/8547005

相关文章

  • DevExpress中文教程 - 如何在macOS和Linux (CTP)上创建、修改报表(下)
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。DevExpressReports—跨平台报表组件,允许用户在针对任何基于.NET平台的应用程序中生成......
  • 二分图匹配---Munkres算法(匈牙利算法)
    在任务指派问题(如n项工作由n个人承担,每个人完成不同工作所花时间不同,那如何分配使得花费的时间最少)以及一些多目标检测任务中的数据关联部分(如一个目标有多个特征点,有多个目标时检测到的特征点属于哪一个目标的问题)常常会看到Munkres算法,这里从原理及实现上简单介绍一下Munkres算......
  • 实训课 - wireshark和网络配置基本知识
    接上文:实训课-计算机网络技术基础笔记https://blog.51cto.com/youyeye/8363907WireShark的基本抓包使用安装wireshark先在虚拟机上安装wireshark(直接在本机上将exe文件复制,然后切换到虚拟机上粘贴)然后工具栏capture–optionsInterface是接口,然后旁边的将是网卡,有两个选项,选择in......
  • Joint Autoregressive and Hierarchical Priors for Learned Image Compression
    abstruct最近的图像压缩模型基于自编码器,学习近似可逆的映射(从像素到量化的可逆表示),这些与熵模型(潜在表示的先验)结合,可以与标准算术编码算法一起使用产生压缩比特流。与简单的全因子先验相比,分层熵模型可以利用更多潜变量中的结构,从而在保存端到端优化的同时提高压缩性能。众所周......
  • Android深入学习之ComponentActivity.registerForActivityResult()方法
    ComponentActivity.startActivityForResult()和ComponentActivity.onActivityResult()已经废弃,如下图所示,取而代之的是统一它俩的ActivityResultLauncher。  ActivityResultLauncher对象可以通过ComponentActivity.registerForActivityResult()方法获取。该方法有两个重载。......
  • Smoke test,Sanity test,Regression test之间的区别
    在测试领域,冒烟测试(smoketest)、可用性测试(sanitytest)和回归测试(regressiontest)彼此之间很相似,范围也有重叠,所以比较容易混淆:都是在需求变更或问题修改后对系统全面测试之前的一种预测试,都是为了发现是否在界面和代码层面引入了问题。 我们可以用一个和河流相关的类比来更好......
  • 解决POST表单提交报错 Content type 'application/x-www-form-urlencoded;charset=UTF
    百度发现application/x-www-form-urlencoded;charset=UTF-8是以键值对拼接的形式,即前端传过来的是键值对形式前端代码:底层使用的vue中的axios发送的请求importrequestfrom'@/utils/request'exportdefault{getTeacherList(page,limit,teacherQuery){returnreque......
  • 解决spring gateway 在globalFilter 中改写response后前端接到的数据不完整问题
    表现情况1. 前端请求后不响应2.前端接到的数据不完整 是因为修改返回体后没修改header中的content-length.设置成正确的content-length就可以了response.getHeaders().setContentLength(bodyStr.getBytes().length);参考https://juejin.cn/post/7050273290752884743......
  • Firefox developer tools truncates long network response, Chrome does not show
    Firefoxdevelopertoolstruncateslongnetworkresponse,ChromedoesnotshowFirefoxdevtoolsnetworkinspectorstilltruncatesresponsesto1MBbydefault.Youcanchangeordisablethelimitbynavigatingtoabout:configandchangingdevtools.netmonit......
  • 通过Spring MVC 实现 Restful 风格请求⽀持
     通过SpringMVC可以很方便地实现Restful风格的请求支持。Restful风格的请求是一种基于HTTP协议的轻量级的Web服务架构风格,它通过HTTP的GET、POST、PUT、DELETE等方法来实现对资源的增删改查操作。在SpringMVC中,我们可以使用注解来定义Restful风格的请求处理方法,并且可以方便......