From bb2a05d1e554a41735267998ff78f1f53c98dd6b Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Mon, 6 Jun 2022 10:08:28 +0200 Subject: [PATCH] Fix: R8 exclusion of serializables --- proguard.pro | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/proguard.pro b/proguard.pro index c4b40244..a32c7e16 100644 --- a/proguard.pro +++ b/proguard.pro @@ -3,3 +3,30 @@ # Disable ServiceLoader reproducibility-breaking optimizations -keep class kotlinx.coroutines.CoroutineExceptionHandler -keep class kotlinx.coroutines.internal.MainDispatcherFactory + +# Keep `Companion` object fields of serializable classes. +# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. +-if @kotlinx.serialization.Serializable class ** +-keepclassmembers class <1> { + static <1>$Companion Companion; +} + +# Keep `serializer()` on companion objects (both default and named) of serializable classes. +-if @kotlinx.serialization.Serializable class ** { + static **$* *; +} +-keepclassmembers class <2>$<3> { + kotlinx.serialization.KSerializer serializer(...); +} + +# Keep `INSTANCE.serializer()` of serializable objects. +-if @kotlinx.serialization.Serializable class ** { + public static ** INSTANCE; +} +-keepclassmembers class <1> { + public static <1> INSTANCE; + kotlinx.serialization.KSerializer serializer(...); +} + +# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. +-keepattributes RuntimeVisibleAnnotations,AnnotationDefault \ No newline at end of file