Fixed
Status Update
Comments
ni...@google.com <ni...@google.com>
ni...@google.com <ni...@google.com> #2
A couple of questions:
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
1. Have you saw crash in real device or only in simulators?
2. Do you use dynamic feature for language ID?
ap...@google.com <ap...@google.com> #3
Tested on Android 12 Emulator with custom executor, but cannot repro this issue.
ni...@google.com <ni...@google.com>
ni...@google.com <ni...@google.com> #4
-
Second crash in the description is from a real device. Experienced it myself on two different Xiaomi phones, plus lots of crashes from users in the Google Play console.
-
Dynamic features are not used in the application.
As a wild guess, I have downgraded build tools from 31.0.0 to 30.0.3, compileSdk from 31 to 30, and moved all work with Language ID to the service in a separate process (just to be sure that crash can kill secondary process instead of main). This combination is in beta for 2 days by now and I don't see any SIGSEGV crashes.
Description
===== DESCRIPTION =====
=======================
Consider the following vector drawable:
```
<vector xmlns:android="
xmlns:aapt="
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#f00"
android:pathData="M 0 0 h 12 v 12 h -12 v -12 z" />
<path
android:pathData="M 4 4 h 12 v 12 h -12 v -12 z"
android:strokeWidth="3">
<aapt:attr name="android:fillColor">
<gradient
android:endX="14.0"
android:endY="14.0"
android:startX="6.0"
android:startY="6.0"
android:type="linear">
<item
android:color="#0f0"
android:offset="0" />
<item
android:color="#00f"
android:offset="1" />
</gradient>
</aapt:attr>
<aapt:attr name="android:strokeColor">
<gradient
android:endX="14"
android:endY="14"
android:startX="6"
android:startY="6"
android:type="linear">
<item
android:color="#000"
android:offset="0" />
<item
android:color="#fff"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#0ff"
android:pathData="M 14 14 h 8 v 8 h -8 v -8 z"
android:strokeWidth="2"
android:strokeColor="#ff0" />
</vector>
```
=============================
===== EXPECTED BEHAVIOR =====
=============================
The vector is correctly rendered on API 28 (see the vector-drawable-gradient-bug-api28.png attachment).
===========================
===== ACTUAL BEHAVIOR =====
===========================
The vector is incorrectly rendered on API 22 (see the vector-drawable-gradient-bug-api22.png attachment).
=======================
===== SOURCE CODE =====
=======================
I believe the issue is in the following source code:
Specifically, if the fill/stroke is NOT a gradient, we need to set the fill/stroke paint's shader back to null so that it doesn't continue to use a shader used by a previous vector drawable path.
======================
===== OTHER INFO =====
======================
Tested using 'androidx.appcompat:appcompat:1.0.0' on API 22 and API 28.
I've attached a sample project that can be used to reproduce the issue to this bug report.
Please assign this bug to Nick Butcher (nickbutcher@google.com) as I know he was the one who wrote the backported vector drawable gradient code.