Regras de exceção do Proguard

Para gerar artefatos ofuscados é necessário a implementação do proguard no projeto. Isso pode ser feito através da adição das seguintes linhas no arquivo build.gradle:

buildTypes {
    debug {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
}         

Também é necessário adicionar as regras de exceção no arquivo proguard-rules.pro, uma vez que após a ofuscação o nome de métodos e classes necessários para o funcionamento do sdk são alterados. As regras de exceção são adicionadas como uma forma de previnir que esses métodos e classes tenham a sua referência no código ofuscada e causem erros na execução do sdk:

-keep class sym.** { *; }

-keep enum sym.** { *; }
                
-keepclassmembers class sym.** { *; }
                
-keepclassmembers enum sym.** { *; }
                
-keepnames class sym.** { *; }
                
-keepnames enum sym.** { *; }
                
-keep class net.danlew.** { *; }
                
-keep class sym.c.n.** { *; }
                
-keepnames class net.danlew.** { *; }
                
-keepclassmembers class net.danlew.** { *; }
                
-keep class com.mastercard.** { *; }
                
-keep class com.combateafraude.helpers.server.model.** { ; }
                
-keep class com.appdynamics.eumagent.runtime.DontObfuscate
                
-keep @com.appdynamics.eumagent.runtime.DontObfuscate class * { *; }
                
-keep class sym.c.** { *; }
                
-keepnames class sym.c.** { *; }
                
-keepclassmembers class sym.c.** { *; }
                
-keep enum sym.c.** { *; }
                
-keepnames enum sym.c.** { *; }
                
-keepclassmembers enum sym.c.** { *; }
                
-keep class com.symbiotic.** { *; }
                
-keepnames class com.symbiotic.** { *; }
                
-keepclassmembers class com.symbiotic.** { *; }
                
-keep enum com.symbiotic.** { *; }
                
-keepnames enum com.symbiotic.** { *; }
                
-keepclassmembers enum com.symbiotic.** { *; }
                
-dontwarn com.mastercard.terminalsdk.**
                
-keep class com.mastercard.terminalsdk.** {*;}
                
-keep class com.mastercard.terminalsdk.**$** {*;}
                
-keep interface com.mastercard.terminalsdk.** { *; }
                
-keep enum com.mastercard.terminalsdk.** { *; }
                
-keep class com.visa.** {*;}
                
-keep class com.visa.**$** {*;}
                
-keep enum com.visa.** { *; }
                
-keepattributes SourceFile,LineNumberTable
                
-keep public class * extends java.lang.Exception
                
# ---------------Begin: proguard configuration for Gson ----------
                
# Gson specific classes
                
-keep class sun.misc.Unsafe {
                
<;
                
<;
                
}
                
# Application classes that will be serialized/deserialized over Gson
                
-keep class com.google.gson.examples.android.model.** {
                
<; 
                
<;< 
                
}
                
-keep class * implements com.google.gson.TypeAdapterFactory
                
-keep class * implements com.google.gson.JsonSerializer
                
-keep class * implements com.google.gson.JsonDeserializer
                
# ---------------End: proguard configuration for Gson ----------
                
# ===APP 1=== BEGIN: Do not re-obfuscate Terminal SDK Jar ======
                
-keep class com.mastercard.terminalsdk.** {*;}
                
-keep class com.mastercard.terminalsdk.**$** {*;}
                
-keep interface com.mastercard.terminalsdk.** { *; }
                
-keep enum com.mastercard.terminalsdk.** { *; }
                
# ===APP 1=== END: Do not re-obfuscate Terminal SDK Jar ======
                
# ===APP 2=== BEGIN: Do not obfuscate references to GSON ======
                
-keep class com.google.gson.**{*;}
                
# ===APP 2=== END: Do not obfuscate references to GSON ======
                
##---------------Begin: proguard configuration for BouncyCastle ----------
                
-keep class org.bouncycastle.** { *; }
                
-keepnames class org.bouncycastle.** { *; }
                
-dontwarn org.bouncycastle.**
                
##---------------End: proguard configuration for BouncyCastle ----------
                
##---------------Begin: proguard configuration for SpongyCastle ----------
                
-keep class org.spongycastle.** { *; }
                
-keepclasseswithmembernames class javax.crypto.**
                
-keepclasseswithmembernames class javax.crypto.Cipher
                
-keep interface javax.crypto.** { *; }
                
-keepclasseswithmembernames class java.security.**
                
-keep interface java.security.**
                
-keepclasseswithmembernames class java.security.** { *; }
                
-keep interface java.security.** { *; }
                
-keepclasseswithmembernames class java.security.Key
                
##---------------End: proguard configuration for SpongyCastle ----------
                
##---------------Begin: proguard configuration for JsonWebToken ----------
                
-keep class io.jsonwebtoken.** { *; }
                
-keepnames class io.jsonwebtoken.** { *; }
                
-keepnames interface io.jsonwebtoken.** { *; }
                
##---------------End: proguard configuration for JsonWebToken ----------
                
-dontwarn org.joda.convert.**
                
-dontwarn org.joda.time.**
                
-keep class org.joda.time.** { *; }
                
-keep interface org.joda.time.** { *; }
                
-keep class net.danlew.** { *; }
                
-keep class com.airbnb.** { *; }
                
-keep class br.com.allowme.** { *; }
                
-keep class com.americanexpress.** { *; }
                
-keep class sym.c.k1.** { *; }
                
-keep class sym.c.j1.** { *; }
                
-keep class com.discover.** { *; }
                
-keep class com.e.d.** { *; }
                
-keep class com.facebook.** { *; }
                
-keep class com.scottyab.** { *; }
                
-keep class br.com.cielo.** { *; }
                
-keep class br.com.allowme.android.** {*;}
                
-keep class br.com.allowme.android.**$** {*;}
                
-keep class br.com.cielo.** { *; }
                
-keepnames class br.com.cielo.** { *; }
                
-keepclassmembers class br.com.cielo.** { *; }
                
-keep class retrofit2.** { *; }
                
-keepattributes *Annotation*
                
-keep class com.squareup.okhttp.** { *; }
                
-keep interface com.squareup.okhttp.** { *; }
                
-keep class okhttp3.** { *; }
                
-keep interface okhttp3.** { *; }
                
-keep class com.github.luben.** {*;}
                
-dontwarn com.github.luben.zstd.ZstdInputStream
                
-dontwarn com.github.luben.zstd.ZstdOutputStream
                
-keep class org.brotli.** {*;}
                
-dontwarn org.brotli.dec.BrotliInputStream
                
-keep class org.tukaani.** {*;}
                
-dontwarn org.tukaani.xz.ARMOptions
                
-dontwarn org.tukaani.xz.ARMThumbOptions
                
-dontwarn org.tukaani.xz.DeltaOptions
                
-dontwarn org.tukaani.xz.FilterOptions
                
-dontwarn org.tukaani.xz.FinishableOutputStream
                
-dontwarn org.tukaani.xz.FinishableWrapperOutputStream
                
-dontwarn org.tukaani.xz.IA64Options
                
-dontwarn org.tukaani.xz.LZMA2InputStream
                
-dontwarn org.tukaani.xz.LZMA2Options
                
-dontwarn org.tukaani.xz.LZMAInputStream
                
-dontwarn org.tukaani.xz.LZMAOutputStream
                
-dontwarn org.tukaani.xz.MemoryLimitException
                
-dontwarn org.tukaani.xz.PowerPCOptions
                
-dontwarn org.tukaani.xz.SPARCOptions
                
-dontwarn org.tukaani.xz.SingleXZInputStream
                
-dontwarn org.tukaani.xz.UnsupportedOptionsException
                
-dontwarn org.tukaani.xz.X86Options
                
-dontwarn org.tukaani.xz.XZ
                
-dontwarn org.tukaani.xz.XZInputStream
                
-dontwarn org.tukaani.xz.XZOutputStream
                
# Please add these rules to your existing keep rules in order to suppress warnings.
                
# This is generated automatically by the Android Gradle plugin.
                
-dontwarn org.apache.avalon.framework.logger.Logger
                
-dontwarn org.apache.log.Hierarchy
                
-dontwarn org.apache.log.Logger
                
-dontwarn org.apache.log4j.Level
                
 -dontwarn org.apache.log4j.Logger
                
-dontwarn org.apache.log4j.Priority
                
-dontwarn org.apache.http.**
                
-dontwarn android.net.**
                
-keep class org.apache.** {*;}
                
-keep class org.apache.http.** { *; }
                
-keep class org.apache.commons.** {*;}
                
-dontwarn org.apache.commons.**    

//OPCIONAL - DE ACORDO COM O PROJETO QUE ESTIVER INTEGRANDO

//AS SEGUINTES CONFIGURAÇÕES DE PROGUARD SERÃO NECESSÁRIAS

 # Regras para androidx.security.crypto

 -keepclassmembers class androidx.security.crypto.** { *; }

 -keep class androidx.security.crypto.** { *; }

 
# Regras para manter as classes e métodos usados por EncryptedSharedPreferences e EncryptedFile

-keep class javax.crypto.spec.SecretKeySpec { *; }

-keep class javax.crypto.Cipher { *; }

-keep class javax.crypto.KeyGenerator { *; }

-keep class javax.crypto.Mac { *; }

 # Manter classes específicas que podem ser usadas pelo MasterKeys

 -keep class androidx.security.crypto.MasterKeys { *; }

# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.visa.CheckmarkMode
-dontwarn javax.naming.NamingEnumeration
-dontwarn javax.naming.NamingException
-dontwarn javax.naming.directory.Attribute
-dontwarn javax.naming.directory.Attributes
-dontwarn javax.naming.directory.DirContext
-dontwarn javax.naming.directory.InitialDirContext
-dontwarn javax.naming.directory.SearchControls
-dontwarn javax.naming.directory.SearchResult
-dontwarn kotlinx.parcelize.Parcelize

# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.fasterxml.jackson.annotation.JsonInclude$Include
-dontwarn com.fasterxml.jackson.annotation.JsonInclude
-dontwarn com.fasterxml.jackson.annotation.JsonProperty
-dontwarn com.fasterxml.jackson.core.type.TypeReference
-dontwarn com.fasterxml.jackson.databind.ObjectMapper
-dontwarn com.github.gcacace.signaturepad.views.SignaturePad
-dontwarn java.lang.reflect.AnnotatedType

Did this page help you?