diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6d2868b2e7..9c2cfb231f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,13 +49,13 @@ android { named("release") { resValue("string", "app_name", "ElementX") signingConfig = signingConfigs.getByName("debug") - isMinifyEnabled = false - setProguardFiles( - listOf( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - ) + + postprocessing { + isRemoveUnusedCode = true + isObfuscate = false + isOptimizeCode = true + proguardFiles("proguard-rules.pro") + } } register("nightly") { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000000..5cc1d0e7ef --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,26 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle.kts. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# JNA +-keep class com.sun.jna.** { *; } +-keep class * implements com.sun.jna.** { *; } + +# kotlinx.serialization + +# Kotlin serialization looks up the generated serializer classes through a function on companion +# objects. The companions are looked up reflectively so we need to explicitly keep these functions. +-keepclasseswithmembers class **.*$Companion { + kotlinx.serialization.KSerializer serializer(...); +} +# If a companion has the serializer function, keep the companion field on the original type so that +# the reflective lookup succeeds. +-if class **.*$Companion { + kotlinx.serialization.KSerializer serializer(...); +} +-keepclassmembers class <1>.<2> { + <1>.<2>$Companion Companion; +} \ No newline at end of file