android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedVa

本文介绍了一种常见的Android应用开发中遇到的问题:在Eclipse上正常运行的应用,在手机上却因布局文件加载失败而崩溃。文章详细分析了错误日志,并给出了解决方案——确保图片资源正确放置。

代码在Eclipse上能运行,拿到源码下编译能通过,放到手机上运行报错:

 

E/AndroidRuntime(15593): FATAL EXCEPTION: main

E/AndroidRuntime(15593): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.powerminimizingmodesetting/com.android.powerminimizingmodesetting.PmmActivity}: android.view.InflateException: Binary XML file line #40: Error inflating class <unknown>

E/AndroidRuntime(15593): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)

E/AndroidRuntime(15593): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)

E/AndroidRuntime(15593): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)

E/AndroidRuntime(15593): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)

E/AndroidRuntime(15593): 	at android.os.Handler.dispatchMessage(Handler.java:99)

E/AndroidRuntime(15593): 	at android.os.Looper.loop(Looper.java:130)

E/AndroidRuntime(15593): 	at android.app.ActivityThread.main(ActivityThread.java:3691)

E/AndroidRuntime(15593): 	at java.lang.reflect.Method.invokeNative(Native Method)

E/AndroidRuntime(15593): 	at java.lang.reflect.Method.invoke(Method.java:507)

E/AndroidRuntime(15593): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)

E/AndroidRuntime(15593): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)

E/AndroidRuntime(15593): 	at dalvik.system.NativeStart.main(Native Method)

E/AndroidRuntime(15593): Caused by: android.view.InflateException: Binary XML file line #40: Error inflating class <unknown>

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.createView(LayoutInflater.java:518)

E/AndroidRuntime(15593): 	at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.parseInclude(LayoutInflater.java:707)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:619)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:408)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:320)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:276)

E/AndroidRuntime(15593): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:235)

E/AndroidRuntime(15593): 	at android.app.Activity.setContentView(Activity.java:1663)

E/AndroidRuntime(15593): 	at com.android.powerminimizingmodesetting.PmmActivity.onCreate(PmmActivity.java:63)

E/AndroidRuntime(15593): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)

E/AndroidRuntime(15593): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)

E/AndroidRuntime(15593): 	... 11 more

E/AndroidRuntime(15593): Caused by: java.lang.reflect.InvocationTargetException

E/AndroidRuntime(15593): 	at java.lang.reflect.Constructor.constructNative(Native Method)

E/AndroidRuntime(15593): 	at java.lang.reflect.Constructor.newInstance(Constructor.java:415)

E/AndroidRuntime(15593): 	at android.view.LayoutInflater.createView(LayoutInflater.java:505)

E/AndroidRuntime(15593): 	... 25 more

E/AndroidRuntime(15593): Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f020004 a=-1 r=0x7f020004}

E/AndroidRuntime(15593): 	at android.content.res.Resources.loadDrawable(Resources.java:1907)

E/AndroidRuntime(15593): 	at android.content.res.TypedArray.getDrawable(TypedArray.java:655)

E/AndroidRuntime(15593): 	at android.view.View.<init>(View.java:1992)

E/AndroidRuntime(15593): 	at android.view.View.<init>(View.java:1940)

E/AndroidRuntime(15593): 	... 28 more

Cause:图片资源放到hdpi

Solution: 将图片资源放到mdpi

2025-08-21 15:34:23.621 4664-4664 OnBackInvokedCallback com.example.tapobulb W OnBackInvokedCallback is not enabled for the application. Set 'android:enableOnBackInvokedCallback="true"' in the application manifest. 2025-08-21 15:34:23.640 4664-4664 AndroidRuntime com.example.tapobulb D Shutting down VM 2025-08-21 15:34:23.642 4664-4664 AndroidRuntime com.example.tapobulb E FATAL EXCEPTION: main Process: com.example.tapobulb, PID: 4664 android.view.InflateException: Binary XML file line #69 in com.example.tapobulb:layout/fragment_edit_auto: Binary XML file line #69 in com.example.tapobulb:layout/fragment_edit_auto: Error inflating class androidx.cardview.widget.CardView Caused by: android.view.InflateException: Binary XML file line #69 in com.example.tapobulb:layout/fragment_edit_auto: Error inflating class androidx.cardview.widget.CardView Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:883) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1039) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:990) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1169) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1130) at android.view.LayoutInflater.inflate(LayoutInflater.java:711) at android.view.LayoutInflater.inflate(LayoutInflater.java:548) at com.example.tapobulb.databinding.FragmentEditAutoBinding.inflate(FragmentEditAutoBinding.java:59) at com.example.tapobulb.EditAutoFragment.onCreateView(EditAutoFragment.kt:26) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:489) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:211) at android.os.Looper.loop(Looper.java:300) at android.app.ActivityThread.main(ActivityThread.java:8321) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:581) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028) Caused by: android.content.res.Resources$NotFoundException: Drawable com.example.tapobulb:drawable/auto_edit_selector with resource ID #0x7f070115 Caused by: android.content.res.Resources$NotFoundException: File res/drawable/auto_edit_selector.xml from drawable resource ID #0x7f070115 at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:959) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:741) at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:307) at android.content.res.Resources.loadDrawable(Resources.java:1050) at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:1020) at android.content.res.TypedArray.getDrawable(TypedArray.java:994) at android.view.View.<init>(View.java:5650) at android.view.ViewGroup.<init>(ViewGroup.java:715) at android.widget.FrameLayout.<init>(FrameLayout.java:99) at android.widget.FrameLayout.<init>(FrameLayout.java:94) at androidx.cardview.widget.CardView.<init>(CardView.java:121) at androidx.cardview.widget.CardView.<init>(CardView.java:117) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:883) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1039) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:990) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1169) 2025-08-21 15:34:23.643 4664-4664 AndroidRuntime com.example.tapobulb E at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1130) at android.view.LayoutInflater.inflate(LayoutInflater.java:711) at android.view.LayoutInflater.inflate(LayoutInflater.java:548) at com.example.tapobulb.databinding.FragmentEditAutoBinding.inflate(FragmentEditAutoBinding.java:59) at com.example.tapobulb.EditAutoFragment.onCreateView(EditAutoFragment.kt:26) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:489) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:211) at android.os.Looper.loop(Looper.java:300) at android.app.ActivityThread.main(ActivityThread.java:8321) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:581) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028) Caused by: android.view.InflateException: Class not found solid at android.graphics.drawable.DrawableInflater.inflateFromClass(DrawableInflater.java:219) at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:138) at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1420) at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1410) at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:199) at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:126) at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:141) at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1420) at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1381) at android.content.res.ResourcesImpl.createFromXmlForDensity(ResourcesImpl.java:1589) at android.content.res.ResourcesImpl.loadXmlDrawable(ResourcesImpl.java:993) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:942) ... 38 more Caused by: java.lang.ClassNotFoundException: Didn't find class "solid" on path: DexPathList[[dex file "/data/data/com.example.tapobulb/code_cache/.overlay/base.apk/classes3.dex", zip file "/data/app/~~qfKlQ_Re9Cn2vwhz0ABuHA==/com.example.tapobulb-7mTS6NX91WSB2xGCrFMFtg==/base.apk"],nativeLibraryDirectories=[/data/app/~~qfKlQ_Re9Cn2vwhz0ABuHA==/com.example.tapobulb-7mTS6NX91WSB2xGCrFMFtg==/lib/arm64, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.graphics.drawable.DrawableInflater.inflateFromClass(DrawableInflater.java:200) ... 49 more 2025-08-21 15:34:23.645 4664-4664 OOMEventManagerFK com.example.tapobulb W Failed to mkdir /data/miuilog/stability/memleak/heapdump/ 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25298): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25299): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25300): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25301): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25302): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:23.640 4664-4664 xample.tapobulb com.example.tapobulb W type=1400 audit(0.0:25303): avc: denied { search } for name="miuilog" dev="dm-57" ino=358 scontext=u:r:untrusted_app:s0:c27,c257,c512,c768 tcontext=u:object_r:data_log_file:s0 tclass=dir permissive=0 app=com.example.tapobulb 2025-08-21 15:34:24.312 2423-2959 ActivityManagerWrapper pid-2423 E getRecentTasks: mainTaskId=1023 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=268435456 cmp=ComponentInfo{com.example.tapobulb/com.example.tapobulb.MainActivity} } 2025-08-21 15:34:24.321 2423-2959 ActivityManagerWrapper pid-2423 E getRecentTasks: mainTaskId=1023 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=268435456 cmp=ComponentInfo{com.example.tapobulb/com.example.tapobulb.MainActivity} } 这是报错
08-22
### 问题分析 `android.content.res.Resources$NotFoundException: Resource ID #0x7f0d0090` 是 Android 开发中常见的运行时异常,表示应用在尝试访问某个资源时未能找到对应的资源 ID。资源 ID 通常是在 `R.java` 或 `R.class` 中自动生成的整型标识符,例如 `#0x7f0d0090` 对应某个具体的资源项。该问题可能由多种原因引起,包括资源文件缺失、资源引用错误、构建问题或配置问题等。 ### 常见原因与解决方案 #### 1. **资源文件缺失或命名错误** - 检查资源文件是否存在于正确的目录中(如 `res/layout/`、`res/values/`、`res/drawable/` 等)。 - 确保资源文件名符合命名规范:只能使用小写字母、数字和下划线,不能包含空格或特殊字符。 - 如果资源是通过 `@+id/` 或 `@string/` 等方式引用的,请确保对应的资源在 XML 文件中已正确定义[^1]。 #### 2. **清理并重建项目** - 执行 `Build > Clean Project` 和 `Build > Rebuild Project`,确保资源文件被正确编译并生成新的 R 文件。 - 如果使用的是 Gradle 构建系统,可以尝试运行以下命令: ```bash ./gradlew clean ./gradlew build ``` #### 3. **检查 R.java 文件** - 确保 `R.java` 文件中存在 `0x7f0d0090` 对应的资源 ID。如果不存在,说明资源未被正确生成。 - 检查资源 ID 所属的资源类型(如 `layout`、`drawable`、`string` 等),并确认对应的 XML 文件中是否正确声明了该资源。 #### 4. **检查资源引用方式** - 如果是通过代码动态引用资源(例如 `getResources().getIdentifier()`),请确保传入的参数正确,包括资源名称、资源类型和包名。 - 示例: ```java int resourceId = getResources().getIdentifier("my_resource_name", "drawable", getPackageName()); if (resourceId != 0) { imageView.setImageResource(resourceId); } else { // 资源未找到 } ``` #### 5. **检查多模块项目中的资源冲突** - 如果项目包含多个模块(如库模块和应用模块),请确保资源名称没有重复,避免资源 ID 冲突。 - 使用 `tools:replace="android:resourceName"` 或 `tools:ignore="ResourceName"` 来处理资源冲突问题。 #### 6. **检查 ProGuard 或 R8 配置** - 如果启用了代码混淆(ProGuard 或 R8),请确保资源 ID 不被混淆。可以在 `proguard-rules.pro` 文件中添加以下规则: ```proguard -keep class **.R$* { public static final int *; } ``` #### 7. **检查 Gradle 配置中的资源合并问题** - 如果使用了 `resConfigs` 或 `resValue` 等配置,请确保没有错误地过滤掉某些资源。 - 在 `build.gradle` 文件中检查 `android` 块下的 `defaultConfig` 和 `buildTypes` 配置。 #### 8. **检查资源目录配置** - 确保资源目录的配置正确,例如不同语言版本的资源目录(如 `values-es/`、`values-zh/`)应与 `build.gradle` 中的 `resConfigs` 一致。 #### 9. **检查 XML 文件中的语法错误** - 如果某个 XML 文件中存在语法错误(如标签未闭合、属性值未加引号等),可能导致资源编译失败。 - 使用 Android Studio 的 XML 编辑器检查并修复错误。 #### 10. **更新 Android Studio 和 Gradle 插件** - 确保使用的是最新版本的 Android Studio 和 Gradle 插件,以避免已知的资源编译问题。 --- ### 示例代码:动态获取资源 ID 以下是一个通过 `getIdentifier()` 动态获取资源 ID 的示例: ```java String resourceName = "my_image"; String resourceType = "drawable"; int resourceId = getResources().getIdentifier(resourceName, resourceType, getPackageName()); if (resourceId != 0) { imageView.setImageResource(resourceId); } else { Log.e("ResourceError", "Resource not found: " + resourceName); } ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值