paparazzi
paparazzi copied to clipboard
NullPointerException when referencing AAPT inlined resources in Compose via `Resources.getXml(id)`
Description AAPT inlined resources are not resolved when referenced from Compose. Due to the way Compose Vector parser works with resources, it first requests an id for resource reference. But as there is no id for this reference, it falls back to 0, so the resource can't be resolved.
Stacktrace
INFO: ComplexColorCompat [4]: Failed to inflate ComplexColor.
java.lang.NullPointerException
at androidx.core.content.res.ComplexColorCompat.createFromXml(ComplexColorCompat.java:155)
at androidx.core.content.res.ComplexColorCompat.inflate(ComplexColorCompat.java:140)
at androidx.core.content.res.TypedArrayUtils.getNamedComplexColor(TypedArrayUtils.java:150)
at androidx.compose.ui.graphics.vector.compat.AndroidVectorParser.getNamedComplexColor(XmlVectorParser.android.kt:663)
at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parsePath(XmlVectorParser.android.kt:281)
at androidx.compose.ui.graphics.vector.compat.XmlVectorParser_androidKt.parseCurrentVectorNode(XmlVectorParser.android.kt:101)
at androidx.compose.ui.res.VectorResources_androidKt.loadVectorResourceInner(VectorResources.android.kt:81)
at androidx.compose.ui.res.PainterResources_androidKt.loadVectorResource(PainterResources.android.kt:95)
at androidx.compose.ui.res.PainterResources_androidKt.painterResource(PainterResources.android.kt:65)
at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt.Header(UndeclaredIncidentsUi.kt:285)
at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt.access$Header(UndeclaredIncidentsUi.kt:1)
at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt$ContentUi$1$1.invoke(UndeclaredIncidentsUi.kt:164)
at co.cuvva.features.cue.presentation.ui.UndeclaredIncidentsUiKt$ContentUi$1$1.invoke(UndeclaredIncidentsUi.kt:163)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.foundation.lazy.list.LazyListScopeImpl$item$2$1.invoke(LazyListScopeImpl.kt:51)
at androidx.compose.foundation.lazy.list.LazyListScopeImpl$item$2$1.invoke(LazyListScopeImpl.kt:51)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
at androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent$content$1.invoke(LazyLayoutItemContentFactory.kt:103)
at androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent$content$1.invoke(LazyLayoutItemContentFactory.kt:94)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:251)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:251)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3337)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2582)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2571)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:247)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2571)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2987)
Jun 24, 2022 12:30:33 PM app.cash.paparazzi.internal.PaparazziLogger logAndroidFramework
Steps to Reproduce
- Create a composable that uses a vector drawable with aapt attr inlined resources (like this one);
- Create a simple Paparazzi test and run it;
Expected behavior Inlined resources (like gradients) are supported and rendered correctly in Compose.
Additional information:
- Paparazzi Version: 1.0.0
- OS: macOS 12.4
- Compile SDK: 31
- Gradle Version: 7.4.2
- Android Gradle Plugin Version: 7.2.1
Screenshots
Expected screenshot | Actual screenshot |
---|---|
![]() |
![]() |