Buscar..


Reglas para algunas de las bibliotecas ampliamente utilizadas

Actualmente contiene reglas para las siguientes bibliotecas:

  1. Cuchillo de mantequilla
  2. RxJava
  3. Biblioteca de soporte de Android
  4. Biblioteca de soporte de diseño de Android
  5. Reequipamiento
  6. Gson y jackson
  7. Otón
  8. Crashlitycs
  9. Picasso
  10. Voleo
  11. Okhttp3
  12. Parcelable
#Butterknife
-keep class butterknife.** { *; }
-keepnames class * { @butterknife.Bind *;}

-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# rxjava
-keep class rx.schedulers.Schedulers {
    public static <methods>;
}
-keep class rx.schedulers.ImmediateScheduler {
    public <methods>;
}
-keep class rx.schedulers.TestScheduler {
    public <methods>;
}
-keep class rx.schedulers.Schedulers {
    public static ** test();
}
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    long producerNode;
    long consumerNode;
}

# Support library
-dontwarn android.support.**
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

# retrofit
-dontwarn okio.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

-dontwarn rx.**
-dontwarn retrofit.**
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

-keep class sun.misc.Unsafe { *; }
#your package path where your gson models are stored
-keep class com.abc.model.** { *; }

# Keep these for GSON and Jackson
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; }
  
#keep otto
-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

# Crashlitycs 2.+
-keep class com.crashlytics.** { *; }
-keep class com.crashlytics.android.**
-keepattributes SourceFile, LineNumberTable, *Annotation*
# If you are using custom exceptions, add this line so that custom exception types are skipped during obfuscation:
-keep public class * extends java.lang.Exception
# For Fabric to properly de-obfuscate your crash reports, you need to remove this line from your ProGuard config:
# -printmapping mapping.txt

# Picasso
-dontwarn com.squareup.okhttp.** 

# Volley
-keep class com.android.volley.toolbox.ImageLoader { *; }

# OkHttp3
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# Needed for Parcelable/SafeParcelable Creators to not get stripped
-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

Habilita ProGuard para tu compilación

Para habilitar las configuraciones de ProGuard para su aplicación, debe habilitarla en su archivo de nivel de módulo. necesitas establecer el valor de minifyEnabled true .

También puede habilitar shrinkResources true que eliminará los recursos que ProGuard marca como no utilizados.

buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

El código anterior aplicará sus configuraciones de ProGuard contenidas en proguard-rules.pro ("proguard-project.txt" en Eclipse) a su apk publicado.

Para que luego pueda determinar la línea en la que se produjo una excepción en un seguimiento de pila, "proguard-rules.pro" debe contener las siguientes líneas:

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

Para habilitar Proguard en Eclipse, agregue proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt a "project.properties"

Eliminar las declaraciones de registro de seguimiento (y otras) en el momento de la compilación

Si desea eliminar las llamadas a ciertos métodos, asumiendo que devuelven un vacío y no tienen efectos secundarios (como en, llamarlos no cambia ningún valor del sistema, argumentos de referencia, estadísticas, etc.), entonces puede hacer que ProGuard los elimine de la salida después de la construcción se completa.

Por ejemplo, esto me parece útil para eliminar las declaraciones de registro de depuración / verbosa útiles en la depuración, pero generar las cadenas para ellas no es necesario en la producción.

# Remove the debug and verbose level Logging statements.
# That means the code to generate the arguments to these methods will also not be called.
# ONLY WORKS IF -dontoptimize IS _NOT_ USED in any ProGuard configs
-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

Nota: Si se usa -dontoptimize en cualquier configuración de ProGuard para que no esté minimizando / eliminando el código no utilizado, esto no eliminará las declaraciones. (Pero a quién no le gustaría quitar el código no utilizado, ¿verdad?)

Nota 2: esta llamada eliminará la llamada al registro, pero no protegerá su código. Las cuerdas permanecerán realmente en el apk generado. Lea más en este post .

Protegiendo su código de hackers

La ofuscación a menudo se considera como una solución mágica para la protección del código, al hacer que su código sea más difícil de entender si los hackers lo descompilan.

Pero si está pensando que eliminar el Log.x(..) realmente elimina la información que necesitan los hackers, tendrá una desagradable sorpresa.

Eliminar todas sus llamadas de registro con:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    ...etc
}

efectivamente eliminará la llamada de registro en sí misma, pero generalmente no las cadenas que se ponen en ellas.

Si, por ejemplo, dentro de su llamada de registro, escribe un mensaje de registro común como: Log.d(MyTag,"Score="+score); , el compilador convierte el + en un 'nuevo StringBuilder ()' fuera de la llamada de registro. ProGuard no cambia este nuevo objeto.

Su código descompilado todavía tendrá un StringBuilder colgante para "Score=" , añadido con la versión ofuscada para la variable de score (digamos que se convirtió a b ).
Ahora el hacker sabe lo que es b , y da sentido a su código.

Una buena práctica para eliminar realmente estos residuos de su código es no ponerlos allí en primer lugar (use el formateador de cadenas en su lugar, con reglas de progreso para eliminarlos), o envolver sus llamadas de Log con:

    if (BuildConfig.DEBUG) {
        Log.d(TAG,".."+var);
    }

Propina:

¡Pruebe lo bien protegido que está su código ofuscado al descompilarlo usted mismo!

  1. dex2jar - convierte el apk a jar
  2. jd - descompila el frasco y lo abre en un editor de gui

Habilitando ProGuard con un archivo de configuración de ofuscación personalizado

ProGuard permite al desarrollador ofuscar, reducir y optimizar su código.

# 1 El primer paso del procedimiento es habilitar el programa en la compilación .

Esto se puede hacer configurando el comando 'minifyEnabled' en verdadero en la compilación deseada

# 2 El segundo paso es especificar qué archivos de proguard estamos usando para la compilación dada

Esto se puede hacer configurando la línea 'proguardFiles' con los nombres de archivo adecuados

buildTypes {
    debug {
        minifyEnabled false
    }
    testRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro'
    }
    productionRelease {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules-tests.pro', 'proguard-rules-release.pro'
    }
}

# 3 El desarrollador puede editar su archivo de programación con las reglas que desee.

Esto se puede hacer editando el archivo (por ejemplo, 'proguard-rules-tests.pro') y agregando las restricciones deseadas. El siguiente archivo sirve como ejemplo de archivo proguard

// default & basic optimization configurations
-optimizationpasses 5
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-verbose

-dump obfuscation/class_files.txt
-printseeds obfuscation/seeds.txt
-printusage obfuscation/unused.txt // unused classes that are stripped out in the process
-printmapping obfuscation/mapping.txt // mapping file that shows the obfuscated names of the classes after proguad is applied

// the developer can specify keywords for the obfuscation (I myself use fruits for obfuscation names once in a while :-) )
-obfuscationdictionary obfuscation/keywords.txt
-classobfuscationdictionary obfuscation/keywords.txt
-packageobfuscationdictionary obfuscation/keywords.txt

Finalmente, cada vez que el desarrollador ejecute y / o genere su nuevo archivo .APK, se aplicarán las configuraciones de programa personalizadas para cumplir con los requisitos.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow