Android Studio 导入的 SVG 文件(生成 XML)使应用程序崩溃(原因:android.content.res.Resources$NotFoundException)

Posted

技术标签:

【中文标题】Android Studio 导入的 SVG 文件(生成 XML)使应用程序崩溃(原因:android.content.res.Resources$NotFoundException)【英文标题】:Android Studio Imported SVG file (resulting XML) crashes the app (Caused by: android.content.res.Resources$NotFoundException) 【发布时间】:2020-04-05 08:34:10 【问题描述】:

我将一个 SVG 文件导入到我的 android 项目中。我尝试显示生成的 xml。它不断使应用程序崩溃。有趣的是,我还有其他 SVG 格式的矢量资产,我已经导入并一直在使用 Android Studio 生成的 xml(s)。除了这个特定的 SVG 之外,它们都工作正常。关于为什么会发生这种情况的任何想法?我会很感激任何指示。谢谢!

下面是指向 SVG 资源的链接和一个简单的 android 项目,它只是显示它。

Link to SVG file

Link to simple android app that just displays the asset

以下是我收到的错误消息。

2019-12-11 16:41:12.418 11489-11489/com.svg.failure E/AndroidRuntime: 致命异常: main 进程:com.svg.failure,PID:11489 java.lang.RuntimeException:无法启动活动 ComponentInfocom.svg.failure/com.svg.failure.MainActivity:android.view.InflateException:二进制 XML 文件第 27 行:二进制 XML 文件第 27 行:膨胀类错误图像视图 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 引起:android.view.InflateException:二进制 XML 文件第 27 行:二进制 XML 文件第 27 行:膨胀类 ImageView 时出错 引起:android.view.InflateException:二进制 XML 文件第 27 行:膨胀类 ImageView 时出错 引起:android.content.res.Resources$NotFoundException: Drawable com.svg.failure:drawable/ic_loader with resource ID #0x7f060062 原因:android.content.res.Resources$NotFoundException:来自可绘制资源 ID #0x7f060062 的文件 res/drawable/ic_loader.xml 在 android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631) 在 android.content.res.Resources.loadDrawable(Resources.java:897) 在 android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:955) 在 android.content.res.TypedArray.getDrawable(TypedArray.java:930) 在 android.widget.ImageView.(ImageView.java:189) 在 android.widget.ImageView.(ImageView.java:172) 在 androidx.appcompat.widget.AppCompatImageView.(AppCompatImageView.java:72) 在 androidx.appcompat.widget.AppCompatImageView.(AppCompatImageView.java:68) 在 androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:187) 在 androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107) 在 androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407) 在 androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:772) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:374) 在 androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 在 androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 在 com.svg.failure.MainActivity.onCreate(MainActivity.java:11) 在 android.app.Activity.performCreate(Activity.java:7136) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)

【问题讨论】:

【参考方案1】:

如果您忘记了,将显示此异常:

mImageView = findViewById(R.id.imageView);

【讨论】:

我不认为这是我的情况。请检查链接(它们指向 github),我什至没有从代码端访问图像视图。它只是在 XML 布局中加载。【参考方案2】:

我会不断更新,直到我解决它。

到目前为止,我已经尝试在 xml 文件中注释掉路径。似乎有一条路径(第一条路径)非常长。那条路径吸引了整辆车。评论第一个(非常长的)路径解决了这个问题。因此,现在我正试图回到向我提供 SVG 文件的人那里,看看我们是否可以拆分线路,以便有效地将一条长路径拆分为多条较短路径。

我会更新结果。

【讨论】:

以上是关于Android Studio 导入的 SVG 文件(生成 XML)使应用程序崩溃(原因:android.content.res.Resources$NotFoundException)的主要内容,如果未能解决你的问题,请参考以下文章

SVG 文件在 Android Studio 中是不是可扩展

当我在 Android Studio 中使用 .svg 文件“不支持错误 @<image>”时

android studio 更改 svg 文件

Android Studio 4 不正确的矢量可绘制预览

在 android studio 中使用复杂的 SVG

2.5Android Studio添加多适配的向量图片