kotlinx.serialization icon indicating copy to clipboard operation
kotlinx.serialization copied to clipboard

Compilation error with R8 8.5.xx and compose type safe navigation

Open Beb3r opened this issue 1 year ago • 3 comments

When using compose navigation type safe and switching to R8 tool version 8.5.xx (8.5.10/8.5.27/8.5.35) compilation fails

Please ensure that class is marked as '@Serializable' and that the serialization compiler plugin is applied. at kotlinx.serialization.SerializationException.(SerializationException.java:49) at kotlinx.serialization.internal.Platform_commonKt.serializerNotRegistered(Platform_common.kt:91) at kotlinx.serialization.SerializersKt__SerializersKt.serializer(SerializersKt__Serializers.kt:278) at kotlinx.serialization.SerializersKt.serializer(Serializers.kt:1) at androidx.navigation.NavDestinationBuilder.(NavDestinationBuilder.kt:91) at androidx.navigation.compose.ComposeNavigatorDestinationBuilder.(ComposeNavigatorDestinationBuilder.kt:95)

When falling back to R8 8.3.xx (8.3.37/8.3.36), compilation doesn't fail.

Environment

  • Kotlin version: 2.0.0
  • Kotlinx serialization: 1.6.3
  • Gradle version: 8.7
  • Gradle plugin version: 8.6.1
  • Navigation: 2.8.0

Is there some new proguard rules to add ?

Beb3r avatar Oct 04 '24 09:10 Beb3r

This looks like R8 issue. Have you tried reporting this to Google's issue tracker?

sandwwraith avatar Oct 04 '24 12:10 sandwwraith

Good point! Just did https://issuetracker.google.com/issues/371227633

Beb3r avatar Oct 04 '24 12:10 Beb3r

Adding the @Keep annotation on routes fixed the issue (Navigation safe type relies on serialization, but since they're not referenced at runtime, R8 strips them away)

Beb3r avatar Oct 04 '24 19:10 Beb3r

Can it be the same issue as #2861 ? Do you use @Serializable object or only @Serializable class?

sandwwraith avatar Nov 27 '24 18:11 sandwwraith