长SVG资产文件错误。R不是一个有效的动词。错误发生在路径的第2位。STRING_TOO_LARGE

问题描述 投票:1回答:1

我现在在使用Android Studio时遇到了一些问题,因为我最近开始使用 "矢量资产"。我已经做了一切必要的工作,以便在我的应用程序中正确显示它们(使用了 app:srcCompat="" 在xml中。android {defaultConfig {vectorDrawables.useSupportLibrary true}} 中,以及 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);onCreate() 之前的方法 setContentView()).

我导入到Android Studio中的svg文件本身没有错误,我可以在ImageView中用向导看到结果,没有任何问题。唯一的问题是,当我运行我的应用程序,它到达绘制svg的时候。我的一些svg仍然可以工作,而其他的则不行,所以我认为其中一些需要太长时间来处理。

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

最重要的一行,我想,是 Caused by: java.lang.IllegalArgumentException: R is not a valid verb. Failure occurred at position 2 of path: STRING_TOO_LARGE.我们也知道这个SVG被夹在中间(它的大小是187kb)。所以我认为我的SVG文件(甚至在Android Studio中通过 "Vector Asset "导入)太重了。此处,当字符串 "长于0x7FFF=32767个字符 "时,就会出现STRING_TOO_LARGE问题。(在复制部分)的确,在我的应用中,唯一能工作的svg都比32 kb轻,这可以解释这个问题。

但我真的需要正确地显示这个svg(不要提供把它转换成png!),如果可能的话,不用优化它的路径.欢迎任何帮助!

android-studio svg runtimeexception android-vectordrawable
1个回答
0
投票

我找到了答案(最后...)。我很笨,请原谅我这一点^^'

其实,Vector Assets超过32 kb并没有什么真正的问题,这要看代码中的内容。我应该多注意一下警告,而不是平时我总是不看......

我在我的svg里面发现了一个超过40kb的路径数据(在一个指令中)。事实上,根据问题中的网站,一个字符串不能超过3.2万个字符,否则会抛出一个STRING_TOO_LARGE类型的异常。总之,只要把这里的这一行去掉,我就可以完美地画出矢量(而它还是250 kb).很抱歉因为一个 "愚蠢 "的问题而打扰到你.你真诚的。

© www.soinside.com 2019 - 2024. All rights reserved.