Android vector asset fatal exception after pull from version control - android

We use Bitbucket and after the last commit, vector images don't work.
12-03 12:48:58.214 26158-26158/linegraphapp.linegraphapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: linegraphapp.linegraphapp, PID: 26158
android.content.res.Resources$NotFoundException: Resource ID #0x7f060064
at android.content.res.Resources.getValue(Resources.java:1378)
If I create the same button in my local copy, all works fine.
what could be wrong?
My layout:
<?xml version="1.0" encoding="utf-8"?>
<menu
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"
tools:context=".AddPicture">
<item
android:id="#+id/plus_btn"
android:icon="#drawable/plus_btn"
android:orderInCategory="2"
android:title="Add"
app:showAsAction="always"></item>
</menu>
Button code:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="34dp"
android:height="34dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FFF"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM17,13h-4v4h-2v-4L7,13v-2h4L11,7h2v4h4v2z"/>
If it needs, I will add full stack trace.
project structure
I use compileSdkVersion 26 and Android Studio 3.2.1

Related

Why does it show Invalid color value ?attr/textcolor Android Studio

I'm trying to build a Generated signed bundle in Android Studio but it doesn't work. It shows this error message.
270 exceptions were raised by workers:
A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$RunnableWrapperWorkAction
A failure occurred while executing
(and much longer)
Invalid color value ?attr/textcolor
This is my code below
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M18,6L6,18"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:fillColor="#00000000"
android:strokeColor="?attr/textcolor"
tools:ignore="VectorRaster"
android:strokeLineCap="round"/>
<path
android:pathData="M6,6L18,18"
tools:ignore="VectorRaster"
android:strokeLineJoin="round"
android:strokeWidth="2.5"
android:fillColor="#00000000"
android:strokeColor="?attr/textcolor"
android:strokeLineCap="round"/>
</vector>

Resource not found exception for ShapeableImageView using vector?

I am using ShapeableImageView in my XML as
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="#drawable/ic_unread_msg"
/>
I am getting Resource not found exception when I run the app on OS 5 and 6
Caused by android.content.res.Resources$NotFoundException: File res/drawable/ic_unread_msg.xml from drawable resource ID #0x7f0700f7
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2850)
at android.content.res.Resources.loadDrawable(Resources.java:2732)
at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
at android.widget.ImageView.<init>(ImageView.java:152)
at android.widget.ImageView.<init>(ImageView.java:140)
at androidx.appcompat.widget.AppCompatImageView.<init>(AppCompatImageView.java:74)
at com.google.android.material.imageview.ShapeableImageView.<init>(ShapeableImageView.java:96)
at com.google.android.material.imageview.ShapeableImageView.<init>(ShapeableImageView.java:92)
at java.lang.reflect.Constructor.newInstance(Constructor.java)
Caused by android.content.res.Resources$NotFoundException: File res/drawable/$ic_unread_msg__0.xml from color state list resource ID #0x7f07000b
at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2960)
at android.content.res.Resources.loadColorStateList(Resources.java:2909)
at android.content.res.TypedArray.getColor(TypedArray.java:439)
at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1605)
at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1584)
at android.graphics.drawable.VectorDrawable.inflateInternal(VectorDrawable.java:666)
at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:571)
Caused by org.xmlpull.v1.XmlPullParserException: Binary XML file line #9: invalid color state list tag gradient
at android.content.res.ColorStateList.createFromXmlInner(ColorStateList.java:217)
at android.content.res.ColorStateList.createFromXml(ColorStateList.java:201)
at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2956)
at android.content.res.Resources.loadColorStateList(Resources.java:2909)
at android.content.res.TypedArray.getColor(TypedArray.java:439)
This is my vector image
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="14dp"
android:height="14dp"
android:viewportWidth="14"
android:viewportHeight="14">
<path android:pathData="M7,0L7,0A7,7 0,0 1,14 7L14,7A7,7 0,0 1,7 14L7,14A7,7 0,0 1,0 7L0,7A7,7 0,0 1,7 0z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="7"
android:endY="14"
android:startX="7"
android:startY="0"
android:type="linear">
<item
android:color="#FF63D8FF"
android:offset="0" />
<item
android:color="#FF6397FF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>
Can't figure out why the crash is happening?
Thanx to Sandi's comment
Replacing android:src with app:srcCompat works

View with svg background crashes on android 6.0 and lower

I have the following situation: I have a constraint layout with background:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="#+id/cl_wave_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#drawable/ic_wave_header_svg_drawable"
android:paddingBottom="41dp"
app:layout_constraintTop_toTopOf="parent">
Here's the ic_wave_header_svg_drawable:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="#drawable/ic_wave_header" />
</layer-list>
Here's the ic_wave_header:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:tools="http://schemas.android.com/tools"
android:width="328dp"
android:height="199dp"
android:viewportWidth="328"
android:viewportHeight="199"
tools:ignore="VectorRaster">
<path
android:fillType="evenOdd"
android:pathData="M328,198.147C328,198.147 287.806,164.737 164,168.868C40.194,172.999 0,140 0,140V198.147V0H328L328,198.147Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="351.346"
android:endY="198.147"
android:startX="351.346"
android:startY="-28.2069"
android:type="linear">
<item
android:color="#FF9DDE10"
android:offset="0" />
<item
android:color="#FF82BD00"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</vector>
When I run the app, it crashes on android 6.0 and lower. In the other versions, it works correctly. What's the problem and how can I solve it?
UPD
Error log:
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_wave_header.xml from drawable resource ID #0x7f080180
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2640)
at android.content.res.Resources.loadDrawable(Resources.java:2540)
at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
at android.graphics.drawable.LayerDrawable.updateLayerFromTypedArray(LayerDrawable.java:296)
at android.graphics.drawable.LayerDrawable.inflateLayers(LayerDrawable.java:239)
at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:164)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1215)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1124)
at android.content.res
It seems that it is something incorrect with drawable, but if it is right, why it doesn't crash on other devices
In your application class -> enable setCompatVectorFromResourcesEnabled
public class App extends Application {
#Override
public void onCreate() {
super.onCreate();
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);//add this
}
This crash is caused by using
android:offset="0" in svg file of your drawable.
To fix this you can either avoid using android:offset="0" in svg file (by using plain color instead of gradient) or you can use .png format of your drawable image for quick fix.

Android Studio - Fraction values must be in the range 0 to 1: 3.0

<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
xmlns:tools="http://schemas.android.com/tools"
android:width="1080dp"
android:height="592dp"
android:viewportWidth="1080"
android:viewportHeight="592"
tools:ignore="VectorRaster">
<path
android:pathData="M0,440.31L0,0L1080,0L1080,440.31C952.58,532.86 758.02,592 540,592S127.42,532.86 0,440.31Z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="14.208"
android:startX="-280.8"
android:endY="380.656"
android:endX="921.24"
android:type="linear">
<item android:offset="0" android:color="#602EC4"/>
<item android:offset="1" android:color="#9C7CDD"/>
<item android:offset="3" android:color="#8355D1"/>
</gradient>
</aapt:attr>
</path>
I am using this code to create a drawable for my app. but I keep getting this error: Fraction values must be in the range 0 to 1: 3.0. My Android Studio Version is 3.6.2

Why do we use drawable v24 in android?

We have a drawable file already in drawable v21 also for ripple effect.
So why we use drawable v24 when we are getting vector file already.
Below is the xml File ic_launcher_foreground.xml.
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportHeight="108"
android:viewportWidth="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeColor="#00000000"
android:strokeWidth="1">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0"/>
<item
android:color="#00000000"
android:offset="1.0"/>
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11
40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81
70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76
60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeColor="#00000000"
android:strokeWidth="1"/>
</vector>
The different drawable folders are for providing different screen densities for device compatibility and for different Android versions.
See this answer for more details

Categories

Resources