diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index c529cc74f..5eb572984 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -4,6 +4,7 @@ # We need to access the SDK using JNA and this makes it very easy to obfuscate away the SDK unless # we keep it here. +-keep class com.bitwarden.core.** { *; } -keep class com.bitwarden.sdk.** { *; } ################################################################################ @@ -28,7 +29,7 @@ -keepclassmembers class com.x8bit.bitwarden.** { *** Companion; } --keepclasseswithmembers class om.x8bit.bitwarden.** { +-keepclasseswithmembers class com.x8bit.bitwarden.** { kotlinx.serialization.KSerializer serializer(...); } @@ -66,16 +67,29 @@ # Okhttp/Retrofit https://square.github.io/okhttp/ & https://square.github.io/retrofit/ ################################################################################ +# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and +# EnclosingMethod is required to use InnerClasses. +-keepattributes Signature, InnerClasses, EnclosingMethod + +# Retrofit does reflection on method and parameter annotations. +-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations + # https://github.com/square/okhttp/blob/339732e3a1b78be5d792860109047f68a011b5eb/okhttp/src/jvmMain/resources/META-INF/proguard/okhttp3.pro#L11-L14 -dontwarn okhttp3.internal.platform.** -dontwarn org.bouncycastle.** # Related to this issue on https://github.com/square/retrofit/issues/3880 # Check https://github.com/square/retrofit/tags for new versions +-keep,allowobfuscation,allowshrinking class kotlin.Result -keep,allowobfuscation,allowshrinking interface retrofit2.Call -keep,allowobfuscation,allowshrinking class retrofit2.Response # This solves this issue https://github.com/square/retrofit/issues/3880 -keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation +# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy +# and replaces all potential values with null. Explicitly keeping the interfaces prevents this. +-if interface * { @retrofit2.http.* ; } +-keep,allowobfuscation interface <1> + ################################################################################ # ZXing ################################################################################