diff --git a/Source/Android/app/build.gradle b/Source/Android/app/build.gradle index 3ad867b2a6..c9c9942f88 100644 --- a/Source/Android/app/build.gradle +++ b/Source/Android/app/build.gradle @@ -128,6 +128,10 @@ android { } } } + + packagingOptions { + jniLibs.useLegacyPackaging = true + } } dependencies { diff --git a/Source/Android/app/proguard-rules.pro b/Source/Android/app/proguard-rules.pro index 985cc25961..5ed4a21dce 100644 --- a/Source/Android/app/proguard-rules.pro +++ b/Source/Android/app/proguard-rules.pro @@ -1,3 +1,43 @@ # Being able to get sensible stack traces from users is more important # than the space savings obfuscation could give us -dontobfuscate + +# +# Kotlin Serialization +# + +# 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 + +# Don't print notes about potential mistakes or omissions in the configuration for kotlinx-serialization classes +# See also https://github.com/Kotlin/kotlinx.serialization/issues/1900 +-dontnote kotlinx.serialization.** + +# Serialization core uses `java.lang.ClassValue` for caching inside these specified classes. +# If there is no `java.lang.ClassValue` (for example, in Android), then R8/ProGuard will print a warning. +# However, since in this case they will not be used, we can disable these warnings +-dontwarn kotlinx.serialization.internal.ClassValueReferences