From fdbd7359a0974a4740969bc9758694cb6c19a18b Mon Sep 17 00:00:00 2001 From: Jorge Martin Espinosa Date: Fri, 23 Jan 2026 16:39:11 +0100 Subject: [PATCH] Remove obfuscation in proguard (#6067) * Remove obfuscation in proguard for the OSS app. Fully allow it by default for enterprise ones. * Add logic to use additional customizable proguard files depending on whether the build is an enterprise one or not. --- app/build.gradle.kts | 17 ++++++++++++++++- ...uard-rules.pro => common-proguard-rules.pro} | 13 +++++++------ app/default-proguard-rules.pro | 2 ++ 3 files changed, 25 insertions(+), 7 deletions(-) rename app/{proguard-rules.pro => common-proguard-rules.pro} (88%) create mode 100644 app/default-proguard-rules.pro diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 322ad47911..969f401385 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -132,8 +132,23 @@ android { optimization { enable = true keepRules { - files.add(File(projectDir, "proguard-rules.pro")) + files.add(File(projectDir, "common-proguard-rules.pro")) files.add(getDefaultProguardFile("proguard-android-optimize.txt")) + + // Depending on whether the app flavor is enterprise or not we want to use different proguard rules. + val flavorProguardFile = if (isEnterpriseBuild) { + // Custom rules for enterprise builds + File(projectDir, "enterprise-proguard-rules.pro") + } else { + // These default rules prevent the OSS app from being obfuscated + File(projectDir, "default-proguard-rules.pro") + } + + if (flavorProguardFile.exists()) { + files.add(flavorProguardFile) + } else { + logger.warn("Proguard file ${flavorProguardFile.absolutePath} does not exist") + } } } } diff --git a/app/proguard-rules.pro b/app/common-proguard-rules.pro similarity index 88% rename from app/proguard-rules.pro rename to app/common-proguard-rules.pro index b09ecf69ca..cce03a546e 100644 --- a/app/proguard-rules.pro +++ b/app/common-proguard-rules.pro @@ -5,6 +5,9 @@ # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html +# Increase optimizations passes to 3 +-optimizationpasses 3 + # JNA -dontwarn java.awt.* -keep class com.sun.jna.** { *; } @@ -41,7 +44,6 @@ static int windowAttachCount(android.view.View); } - # Keep LogSessionId class and related classes (https://github.com/androidx/media/issues/2535) -keep class android.media.metrics.LogSessionId { *; } -keep class android.media.metrics.** { *; } @@ -66,10 +68,9 @@ -dontwarn androidx.window.sidecar.SidecarWindowLayoutInfo # Also needed after AGP 8.13.1 upgrade, it seems like proguard is now more aggressive on removing unused code --keep,allowshrinking class org.matrix.rustcomponents.sdk.** { *;} --keep,allowshrinking class uniffi.** { *;} --keep,allowshrinking class io.element.android.x.di.** { *; } --keepclasseswithmembernames,allowoptimization,allowshrinking class io.element.android.** { *; } +-keep,allowoptimization,allowshrinking class org.matrix.rustcomponents.sdk.** { *;} +-keep,allowoptimization,allowshrinking class uniffi.** { *;} +-keep,allowoptimization,allowshrinking class io.element.android.x.di.** { *; } # Keep Metro classes --keep,allowshrinking class dev.zacsweers.metro.** { *; } +-keep,allowoptimization,allowshrinking class dev.zacsweers.metro.** { *; } diff --git a/app/default-proguard-rules.pro b/app/default-proguard-rules.pro new file mode 100644 index 0000000000..a6dce2f0ce --- /dev/null +++ b/app/default-proguard-rules.pro @@ -0,0 +1,2 @@ +# Don't obfuscate anything for non-enterprise builds +-dontobfuscate