SVG资产文件太长错误:R不是有效的动词.路径2的位置2发生故障:STRING_TOO_LARGE [英] long SVG Asset file error : R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE

查看:192
本文介绍了SVG资产文件太长错误:R不是有效的动词.路径2的位置2发生故障:STRING_TOO_LARGE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于我最近开始使用矢量资产",因此我现在在Android Studio上遇到了一些问题.我已经完成了将其正确显示在应用程序中的所有必要操作(使用xml android {defaultConfig {vectorDrawables.useSupportLibrary true}} app:srcCompat =" 在build.gradle中>,并在 setContentView()之前的 onCreate()方法中的 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 中.>

我导入Android Studio的svg文件本身没有错误,使用向导在ImageView中可以毫无问题地看到结果.唯一的问题是当我运行我的应用程序时,它是在绘制svg的时候到来的.我的某些svg仍然有效,而其他的则无法正常工作,因此我认为其中一些处理时间过长.这是错误:

  E/AndroidRuntime:致命异常:main流程:com.retroverse.bataille_corse,PID:18807java.lang.RuntimeException:无法启动活动ComponentInfo {com.retroverse.bataille_corse/com.retroverse.bataille_corse.MenuPrincipal}:android.view.InflateException:二进制XML文件行#127:二进制XML文件行#127:错误膨胀类影像检视在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2985)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)在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:1840)在android.os.Handler.dispatchMessage(Handler.java:106)在android.os.Looper.loop(Looper.java:201)在android.app.ActivityThread.main(ActivityThread.java:6872)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:547)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)引起原因:android.view.InflateException:二进制XML文件行#127:二进制XML文件行#127:错误膨胀了类ImageView原因:android.view.InflateException:二进制XML文件行#127:错误放大了类ImageView造成原因:android.content.res.Resources $ NotFoundException:资源ID为#0x7f060099的Drawable com.retroverse.bataille_corse:drawable/card_49_en引起原因:android.content.res.Resources $ NotFoundException:可绘制资源ID#0x7f060099中的文件res/drawable/card_49_en.xml在android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:854)在android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:634)在android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:329)在android.content.res.Resources.getDrawableForDensity(Resources.java:902)在android.content.res.Resources.getDrawable(Resources.java:841)在android.content.Context.getDrawable(Context.java:644)在androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)在androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)在androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)在androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)在androidx.appcompat.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:59)在androidx.appcompat.widget.AppCompatImageView中.< init>(AppCompatImageView.java:78)在androidx.appcompat.widget.AppCompatImageView中.< init>(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:776)在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)在android.view.LayoutInflater.rInflate(LayoutInflater.java:867)在android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)在android.view.LayoutInflater.inflate(LayoutInflater.java:519)在android.view.LayoutInflater.inflate(LayoutInflater.java:427)在android.view.LayoutInflater.inflate(LayoutInflater.java:374)在androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)在androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)在com.retroverse.bataille_corse.MenuPrincipal.onCreate(MenuPrincipal.java:24)在android.app.Activity.performCreate(Activity.java:7232)E/AndroidRuntime:位于android.app.Activity.performCreate(Activity.java:7221)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2965)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)在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:1840)在android.os.Handler.dispatchMessage(Handler.java:106)在android.os.Looper.loop(Looper.java:201)在android.app.ActivityThread.main(ActivityThread.java:6872)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:547)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)引起原因:java.lang.IllegalArgumentException:R不是有效的动词.路径2的位置2发生故障:STRING_TOO_LARGE在android.util.PathParser.nCreatePathDataFromString(本地方法)在android.util.PathParser.access $ 200(PathParser.java:24)在android.util.PathParser $ PathData中.< init>(PathParser.java:76)在android.graphics.drawable.VectorDrawable $ VFullPath.updateStateFromTypedArray(VectorDrawable.java:2016)在android.graphics.drawable.VectorDrawable $ VFullPath.inflate(VectorDrawable.java:1967)在android.graphics.drawable.VectorDrawable.inflateChildElements(VectorDrawable.java:819)在android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:717)在android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)在android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)在android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1291)在android.content.res.ResourcesImpl.createFromXmlForDensity(ResourcesImpl.java:1506)在android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:838)...另外41个 

我认为,最重要的一行是,其原因是:java.lang.IllegalArgumentException:R不是有效的动词.路径2的位置2发生故障:STRING_TOO_LARGE .我们也知道该svg夹在中间(大小为187 KB).因此,我认为我的SVG文件(甚至是通过"Vector Asset"在Android Studio中导入的)都太重了.正如我们此处所述,当出现以下情况时,出现STRING_TOO_LARGE问题:字符串长于0x7FFF = 32767个字符".(在复制部分)实际上,在我的应用程序中唯一起作用的svg小于32 kb,这可以解释这一点.

但是我确实需要正确显示此svg(不提供将其转换为png!),并且如果可能的话,不优化其路径.任何帮助都将受到欢迎!

解决方案

我找到了答案(最后...).

实际上,超过32 kb的Vector Assets并没有真正的问题,这完全取决于代码中的内容.我应该比平时更注意警告,而不是平时不去看...

我在svg中发现了一个路径数据,该路径数据的路径大于40kb(以一个字符串表示).事实是,根据所讨论的站点,字符串不能超过(约)32k个字符,否则任何xml文件中使用的整个字符串将被"STRING_TOO_LARGE"替换.无论如何,只要在此处删除这条线,我就可以很好地绘制矢量(虽然它仍然是250 kb,但现在不完整).

令人惊讶的是,Android Studio仅显示警告(字符串长度超过32k个字符)只是为了让我明白,路径较长的svg可能显示缓慢,而不是警告我路径会因为它太长而被损坏(或者甚至最好将此警告变成IDE中的 错误,以避免令人不愉快的意外).

I'm having some problems with Android Studio at the moment because I recently started using "Vector Assets". I've done absolutely everything necessary to display them correctly in my application (using the app:srcCompat="" in the xml, android {defaultConfig {vectorDrawables.useSupportLibrary true}} in the build.gradle, and AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); in the onCreate() method before setContentView()).

The svg files I imported into Android Studio do not have errors themselves, I can see the result without any problem in an ImageView with the wizard. The only problem comes when I run my application and it arrives at the time to draw the svg. Some of my svg's still work, while others don't, so I think some of them take too long to process. Here is the error :

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.retroverse.bataille_corse, PID: 18807
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.retroverse.bataille_corse/com.retroverse.bataille_corse.MenuPrincipal}: android.view.InflateException: Binary XML file line #127: Binary XML file line #127: Error inflating class ImageView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2985)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1840)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
     Caused by: android.view.InflateException: Binary XML file line #127: Binary XML file line #127: Error inflating class ImageView
     Caused by: android.view.InflateException: Binary XML file line #127: Error inflating class ImageView
     Caused by: android.content.res.Resources$NotFoundException: Drawable com.retroverse.bataille_corse:drawable/card_49_en with resource ID #0x7f060099
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/card_49_en.xml from drawable resource ID #0x7f060099
        at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:854)
        at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:634)
        at android.content.res.MiuiResourcesImpl.loadDrawable(MiuiResourcesImpl.java:329)
        at android.content.res.Resources.getDrawableForDensity(Resources.java:902)
        at android.content.res.Resources.getDrawable(Resources.java:841)
        at android.content.Context.getDrawable(Context.java:644)
        at androidx.core.content.ContextCompat.getDrawable(ContextCompat.java:454)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:144)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
        at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
        at androidx.appcompat.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:59)
        at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:78)
        at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:68)
        at androidx.appcompat.app.AppCompatViewInflater.createImageView(AppCompatViewInflater.java:187)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:107)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:776)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.retroverse.bataille_corse.MenuPrincipal.onCreate(MenuPrincipal.java:24)
        at android.app.Activity.performCreate(Activity.java:7232)
E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:7221)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2965)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3120)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1840)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:201)
        at android.app.ActivityThread.main(ActivityThread.java:6872)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
     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.access$200(PathParser.java:24)
        at android.util.PathParser$PathData.<init>(PathParser.java:76)
        at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:2016)
        at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1967)
        at android.graphics.drawable.VectorDrawable.inflateChildElements(VectorDrawable.java:819)
        at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:717)
        at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
        at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
        at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1291)
        at android.content.res.ResourcesImpl.createFromXmlForDensity(ResourcesImpl.java:1506)
        at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:838)
            ... 41 more

The most important line, I think, is Caused by: java.lang.IllegalArgumentException: R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE. We also know that this svg was caught in the middle (its size is 187 kilobytes). So I think my SVG file (even imported in Android Studio by "Vector Asset") is too heavy. As we are told here, the STRING_TOO_LARGE issue appears when the string "is longer than 0x7FFF = 32767 characters". (In the reproduction part) Indeed, the only svg to work in my application are lighter than 32 kb, which could explain this.

But I really need to display this svg (don't offer to convert it to png!) correctly, and if possible without optimizing its paths. Any help would be welcome!

解决方案

I found the answer (at last...).

Actually, there is no real problem with Vector Assets over 32 kb, it all depends on what is in the code. I should have paid more attention to the warnings than usual I don't always look at...

I discovered inside my svg a path data with a path of more than 40kb (in one string so). The fact is that, according to the site in the question, a String can't have more than (about) 32k characters or the whole string used in any xml file will be replaced by "STRING_TOO_LARGE". Anyway, by just removing this line here, I can draw the vector perfectly well (while it is still 250 kb, but now incomplete).

What's quite surprising is that Android Studio only displays a warning (where the string is longer than 32k characters) just to make me understand that an svg with a long path can be slow to display, instead of warning me that the path will be corrupted because it's too long (or even better turn this warning into an error in the IDE, to avoid an unpleasant surprise).

这篇关于SVG资产文件太长错误:R不是有效的动词.路径2的位置2发生故障:STRING_TOO_LARGE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆