From 26ddccccd29f04e052fcb284d3fd8a99a4ad12a9 Mon Sep 17 00:00:00 2001 From: Aki Chang Date: Wed, 16 Apr 2025 10:11:29 +0800 Subject: [PATCH] fix(android): add proguard rules for release build crash (#11710) --- .../apps/android/App/app/proguard-rules.pro | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/packages/frontend/apps/android/App/app/proguard-rules.pro b/packages/frontend/apps/android/App/app/proguard-rules.pro index f1b424510d..de90aa873c 100644 --- a/packages/frontend/apps/android/App/app/proguard-rules.pro +++ b/packages/frontend/apps/android/App/app/proguard-rules.pro @@ -19,3 +19,52 @@ # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile + +-keep class com.sun.jna.** { *; } +-keep class * implements com.sun.jna.** { *; } +-dontwarn java.awt.Component +-dontwarn java.awt.GraphicsEnvironment +-dontwarn java.awt.HeadlessException +-dontwarn java.awt.Window + +# 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 + +# disable optimisation for descriptor field because in some versions of ProGuard, optimization generates incorrect bytecode that causes a verification error +# see https://github.com/Kotlin/kotlinx.serialization/issues/2719 +-keepclassmembers public class **$$serializer { + private ** descriptor; +}