'Xamarin.Android: vector asset not supported by Android 5.x

I work on a Xamarin.Android project where I've created a Layout that contains a vectorial asset as background.

This works fine, but on Android 5.x, I get the exception "Could not activate JNI Handle" when the layout is instantiated.

I've created the vector asset through Android Studio, from a .svg.

Is there another way to create the asset, to make it compatible with Android 5.x?

The layout looks like this:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingHorizontal="@dimen/card_padding_horizontal"
    android:id="@+id/CardLayout">

    <ImageView
        android:id="@+id/CardBackgroundImageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true"
        android:src="@drawable/card_background"/>
    
    <!-- other items -->
</androidx.constraintlayout.widget.ConstraintLayout>

The vector asset looks like this:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="349dp"
    android:height="211dp"
    android:viewportWidth="349"
    android:viewportHeight="211">
<path
    android:pathData="M19,0L330,0A16,16 0,0 1,346 16L346,190.39A16,16 0,0 1,330 206.39L19,206.39A16,16 0,0 1,3 190.39L3,16A16,16 0,0 1,19 0z">
    <aapt:attr name="android:fillColor">
    <gradient 
        android:startY="0"
        android:startX="3"
        android:endY="216.335"
        android:endX="339.608"
        android:type="linear">
        <item android:offset="0" android:color="#FF35373A"/>
        <item android:offset="0.337274" android:color="#FF5F6367"/>
        <item android:offset="0.591875" android:color="#FF5F6367"/>
        <item android:offset="0.929681" android:color="#FF35373A"/>
    </gradient>
    </aapt:attr>
</path>
<path
    android:pathData="M246.565,84.052C233.962,84.052 225.75,92.525 225.75,103.808C225.75,116.802 234.938,124.46 247.988,124.46C251.931,124.46 255.834,123.93 259.087,122.586L260.022,113.584C257.135,114.928 254.045,115.906 250.712,115.906C245.467,115.906 239.369,113.462 238.271,107.067H267.624C267.908,93.095 260.794,84.052 246.565,84.052ZM237.946,99.49C238.922,95.254 242.012,92.077 246.931,92.077C251.525,92.077 254.777,94.806 255.387,99.49H237.946Z"
    android:strokeAlpha="0.1"
    android:fillColor="#F7F8F9"
    android:fillAlpha="0.1"/>
</vector>


Solution 1:[1]

The problem was related to the <gradient> property of the vector asset.

To fix it, I've finally used app:srcCompat instead of android:src for the ImageView.

<ImageView
    android:id="@+id/CardBackgroundImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    app:srcCompat="@drawable/card_background"/>

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Gold.strike