2012-09-12 25 views
23

Quiero crear una aplicación ofuscada de Android. Yo uso ProGuard para eso. Me gustaría eliminar automáticamente todos los mensajes de Log *. ¿Cómo puedo hacer eso? Encontré this publicación pero todavía los obtengo. (Uso un descompilador para verificar la ofuscación).
El PROGuard-project.txt es la siguiente:
Android Proguard no elimina todos los mensajes de registro

-injars  libs/In.jar 
-outjars  libs/Out.jar 
#-libraryjars <java.home>/lib/rt.jar 
-libraryjars C:/Users/thomas/android-sdks/platforms/android-7/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-renamesourcefileattribute SourceFile 
-keepattributes Exceptions,InnerClasses,Signature,Deprecated, 
       SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-keep public class * { 
    public protected *; 
} 

-keepclassmembernames class * { 
    java.lang.Class class$(java.lang.String); 
    java.lang.Class class$(java.lang.String, boolean); 
} 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keepclassmembers class * implements java.io.Serializable { 
    static final long serialVersionUID; 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 
-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** e(...); 
} 

sería apreciada Cualquier ayuda.
Gracias.

Respuesta

38

Esto sólo eliminar todos depurar Log.d(TAG, "..."); y error Log.e(TAG, "...") llamadas:

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

Para eliminar todas las llamadas de registro, basta con utilizar esto:

-assumenosideeffects class android.util.Log { *; } 
+0

Hola @EricLafortune Puede explicar su comentario? –

+1

@EricLafortune método 'wait' en ** android.util.Log ** ?? –

18

La configuración por defecto de Android Proguard desactiva la optimización. Para habilitarlo, en el archivo project.properties de su proyecto utilice proguard-android-optimize.txt en lugar de proguard-android.txt

12

Para cualquiera que parezca no estar a la defensiva, debe hacer Seguro que haces dos cosas.

1: De @yorkw

-assumenosideeffects class android.util.Log { *; } 

2: De @Gallal

En el uso de archivos project.properties de su proyecto:

proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt 

en lugar de

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 

Esto es porque tu Ave dos opciones Proguard "fuera de la caja" ya que están incluidos en el SDK

android-adk > tools > proguard

que contiene dos archivos:

proguard-android.txt 
proguard-android-optimize.txt 

la esperanza de que ayude a alguien más abajo de la línea.

+0

El archivo 'project.properties' es ese (ahora) llamado' local.properties'? –

+2

Estoy bastante seguro de que ahora todo es diferente si usa Android Studio. No pienses que incluso se llama proguard. Creo que se llama "minify" que permite que proguard se ejecute. Eso dijo. ESTAS INSTRUCCIONES SON SOLAMENTE PARA ECLIPSE. –

+0

Por alguna razón, aún veo llamadas de ** Log ** en mi clase. –

7

Si tiene Android Studio, debe modificar el build.gradle de su aplicación principal.

En su archivo gradle, debe especificar el uso de proguard-android-optimize.txt como el archivo predeterminado.

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

     // With the file below, it does not work! 
     //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

En realidad, en el archivo predeterminado proguard-android.txt, la optimización se desactiva con las dos banderas:

-dontoptimize 
-dontpreverify 

archivo La proguard-android-optimize.txt no agrega esas líneas, por lo que ahora pueden trabajar assumenosideeffects.

Entonces, como se ha dicho en otras respuestas para Eclipse o de lo contrario, sólo hay que añadir a su archivo principal Proguard la línea:

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