Android开发InflateException错误:AppCompatImageView加载Drawable失败
问题:SVG转Drawable后加载报错(Resources$NotFoundException)
将布局背景替换为从29.9Mb SVG文件转换而来的drawable资源img7后,出现加载错误。无论将该drawable设置为AppCompatImageView的src属性还是background属性,均触发相同的Error inflating class androidx.appcompat.widget.AppCompatImageView报错。核心错误为Resources$NotFoundException,底层原因是路径解析时抛出IllegalArgumentException: R is not a valid verb。
完整错误日志
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hemantmaurya.storemanagementapp, PID: 8595 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hemantmaurya.storemanagementapp/com.hemantmaurya.storemanagementapp.MainActivity}: android.view.InflateException: Binary XML file line #16 in com.hemantmaurya.storemanagementapp:layout/activity_main: Binary XML file line #16 in com.hemantmaurya.storemanagementapp:layout/activity_main: Error inflating class androidx.appcompat.widget.AppCompatImageView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3645) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Caused by: android.view.InflateException: Binary XML file line #16 in com.hemantmaurya.storemanagementapp:layout/activity_main: Binary XML file line #16 in com.hemantmaurya.storemanagementapp:layout/activity_main: Error inflating class androidx.appcompat.widget.AppCompatImageView Caused by: android.view.InflateException: Binary XML file line #16 in com.hemantmaurya.storemanagementapp:layout/activity_main: Error inflating class androidx.appcompat.widget.AppCompatImageView 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:858) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:538) at com.hemantmaurya.storemanagementapp.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:66) at com.hemantmaurya.storemanagementapp.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:60) at com.hemantmaurya.storemanagementapp.MainActivity.onCreate(MainActivity.kt:12) at android.app.Activity.performCreate(Activity.java:8305) at android.app.Activity.performCreate(Activity.java:8284) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) E/AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Drawable com.hemantmaurya.storemanagementapp:drawable/img7 with resource ID #0x7f0700ee Caused by: android.content.res.Resources$NotFoundException: File res/drawable/img7.xml from drawable resource ID #0x7f0700ee at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:875) at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:669) at android.content.res.Resources.loadDrawable(Resources.java:1002) at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:1017) at android.content.res.TypedArray.getDrawable(TypedArray.java:991) at android.view.View.<init>(View.java:5579) at android.widget.ImageView.<init>(ImageView.java:196) at android.widget.ImageView.<init>(ImageView.java:191) at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:78) at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:73) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:858) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1010) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088) at android.view.LayoutInflater.inflate(LayoutInflater.java:686) at android.view.LayoutInflater.inflate(LayoutInflater.java:538) at com.hemantmaurya.storemanagementapp.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:66) at com.hemantmaurya.storemanagementapp.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:60) at com.hemantmaurya.storemanagementapp.MainActivity.onCreate(MainActivity.kt:12) at android.app.Activity.performCreate(Activity.java:8305) at android.app.Activity.performCreate(Activity.java:8284) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1417) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3626) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3782) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7872) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) Caused by: java.lang.IllegalArgumentException: R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE at android.util.PathParser.nCreatePathDataFromString(Native Method) at android.util.PathParser.-$$Nest$smnCreatePathDataFromString(Unknown Source:0) at android.util.PathParser$PathData.<init>(PathParser.java:79) at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:2043) at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1994) at android.graphics.drawable.VectorDrawable.inflateChildElements(VectorDrawable.java:840) at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:738) at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:141) at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1394) at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1355) E/AndroidRuntime: at android.content.res.ResourcesImpl.loadXmlDrawable(ResourcesImpl.java:907) at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:861) ... 37 more
相关布局代码
布局根容器设置背景
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:background="@drawable/img7">
AppCompatImageView设置src
<androidx.appcompat.widget.AppCompatImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/img7" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"/>
AppCompatImageView设置background
<androidx.appcompat.widget.AppCompatImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/img7" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"/>
解决方案
核心原因
你的SVG文件体积达到29.9Mb,属于超大型SVG。Android的VectorDrawable解析器在处理这类文件时,会因为路径数据过长被系统截断,导致解析出无效的路径指令(比如截断后出现单独的"R",而SVG路径指令中并没有这个动词),最终触发资源找不到的异常。
具体解决步骤
- 压缩优化SVG文件:
简化SVG的路径结构,移除冗余节点、重复图形、注释和元数据。这类超大SVG通常包含大量不必要的高精度坐标或重复元素,压缩后体积会大幅减小,避免解析时被截断。 - 转换为Bitmap格式:
如果SVG过于复杂难以有效压缩,直接将其导出为PNG或JPG格式,放入对应分辨率的drawable目录(如drawable-xhdpi、drawable-xxhdpi)。Bitmap不会触发VectorDrawable的解析问题,更适合作为大图使用。 - 检查SVG语法:
验证原SVG是否存在语法错误,比如无效的路径指令、未闭合的路径等,修复后再导入项目。 - 避免用超大VectorDrawable做背景/大图:
VectorDrawable的设计初衷是小图标,超大图建议使用Bitmap或者分块加载的方式,避免解析性能问题和异常。
内容的提问来源于stack exchange,提问作者Hemant Maurya
相关产品推荐
相关产品推荐

