Fixed
Status Update
Comments
bo...@gmail.com <bo...@gmail.com> #2
Any plans to support this?
dw...@gmail.com <dw...@gmail.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.material3:material3-adaptive-navigation-suite:1.4.0-alpha07
androidx.compose.material3:material3-adaptive-navigation-suite-android:1.4.0-alpha07
ar...@google.com <ar...@google.com> #4
We have passed this defect on to the development team and will update this issue with more information as it becomes available.
zt...@google.com <zt...@google.com> #5
So yes, the Studio should NOT import any empty path. I change the bug's summary to reflect that.
However, on Nougat, this crash is working as intended. Since this empty path thing only consume CPU but draw nothing.
However, on Nougat, this crash is working as intended. Since this empty path thing only consume CPU but draw nothing.
bo...@gmail.com <bo...@gmail.com> #6
So is a change being pursued in Android Studio to improve this situation?
ar...@google.com <ar...@google.com>
ti...@google.com <ti...@google.com> #7
I'm still able to repro this issue with the svg provided in #1, and it caused a crash as soon as I launched the app, which is a really bad user experience. We need to have studio team take a look at this issue.
ti...@google.com <ti...@google.com> #8
Sergei, in the SVG to VD conversion, can we add a step to remove the empty paths? It is currently crashing on P, and presumably N and O, since we haven't changed the parsing logic. See the converted VD below:
<vector android:height="24dp" android:viewportHeight="173.66245"
android:viewportWidth="146.16132" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android ">
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillColor="#000000"
android:pathData="M97.81,74.73L85.38,74.73L85.38,51.86c0,0 0,0 0,-0.01 0,-19.28 10.94,-34.97 24.39,-34.97 13.45,0 24.39,15.69 24.39,34.97 0,0 0,0 0,0v22.87h11.25L145.41,51.86h-0.01c-0.01,-28.23 -15.96,-51.11 -35.64,-51.11 -19.68,0 -35.64,22.89 -35.64,51.11v22.86h-73.38v98.19h97.06v-98.19z"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
</vector>
<vector android:height="24dp" android:viewportHeight="173.66245"
android:viewportWidth="146.16132" android:width="24dp" xmlns:android="
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#ffffff"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillAlpha="0.5" android:fillColor="#000000"
android:pathData="" android:strokeAlpha="0.5"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
<path android:fillColor="#000000"
android:pathData="M97.81,74.73L85.38,74.73L85.38,51.86c0,0 0,0 0,-0.01 0,-19.28 10.94,-34.97 24.39,-34.97 13.45,0 24.39,15.69 24.39,34.97 0,0 0,0 0,0v22.87h11.25L145.41,51.86h-0.01c-0.01,-28.23 -15.96,-51.11 -35.64,-51.11 -19.68,0 -35.64,22.89 -35.64,51.11v22.86h-73.38v98.19h97.06v-98.19z"
android:strokeColor="#000000" android:strokeWidth="1.5"/>
</vector>
mi...@gmail.com <mi...@gmail.com> #9
Also affects (Image) Asset Studio. I assume the fix is the same (or that one fix fixes both).
Description
Same issue as 227617, and I provided a sample project demonstrating the issue.
Starting in API 24 (and in API 25), Android does not handle vector graphics the same way if there are empty path strings. I create a .svg file using Inkscape. I then save and import it with Android Studio File -> New -> Vector Asset and reference the drawable in an ImageView. When I run the app, it crashes on Nougat but works on Marshmallow.
minSDK 23, target SDK 25
Tested as working on both a Nexus 5X API 23 emulator and a Moto X (2nd gen) on Android 6.0. Tested as failing on a Nexus 5X API 23 emulator and a real Nexus 5X on Android 7.1.1.
To reproduce, you can just run the test app shared on Drive here (called VictorsVector.zip):
Note: The source unlock_sample.svg file is available in the zip archive as well.
This fails 100% of the time on Nougat and works 100% of the time on Marshmallow. See the end of this report for the Android Monitor log output.
Expected operation: It would be great if this just worked on Nougat. Alternatively, perhaps Studio should generate a warning or error when trying to use or import an .svg with empty path strings instead of the developer encountering the runtime failure.
Android Monitor log output:
01-23 17:00:27.577 8125-8125/com.e_gineering.victorsvector E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.e_gineering.victorsvector, PID: 8125
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.e_gineering.victorsvector/com.e_gineering.victorsvector.MainActivity}: android.view.InflateException: Binary XML file line #14: Binary XML file line #14: Error inflating class ImageView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.view.InflateException: Binary XML file line #14: Binary XML file line #14: Error inflating class ImageView
Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class ImageView
Caused by: android.content.res.Resources$NotFoundException: Drawable com.e_gineering.victorsvector:drawable/ic_unlock_sample with resource ID #0x7f020053
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_unlock_sample.xml from drawable resource ID #0x7f020053
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:725)
at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
at android.content.res.Resources.loadDrawable(Resources.java:858)
at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
at android.widget.ImageView.<init>(ImageView.java:162)
at android.widget.ImageView.<init>(ImageView.java:150)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:60)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:56)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)
at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1021)
at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1080)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:47)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:288)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143)
at com.e_gineering.victorsvector.MainActivity.onCreate(MainActivity.java:11)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
01-23 17:00:27.577 8125-8125/com.e_gineering.victorsvector E/AndroidRuntime: Caused by: java.lang.IllegalArgumentException: Path string cannot be empty.
at android.util.PathParser.nCreatePathDataFromString(Native Method)
at android.util.PathParser.-wrap1(PathParser.java)
at android.util.PathParser$PathData.<init>(PathParser.java:74)
at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1914)
at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1865)
at android.graphics.drawable.VectorDrawable.inflateChildElements(VectorDrawable.java:758)
at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:659)
at android.graphics.drawable.DrawableInflater.inflateFromXml(DrawableInflater.java:130)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1227)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1200)
at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:715)
... 33 more