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

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.Resources
NotFoundException: 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.Resources
NotFoundException: 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值