Android Proguard non rimuove tutti i messaggi di registro

Voglio creare un’applicazione Android offuscata. Io uso ProGuard per questo. Vorrei rimuovere automaticamente tutti i messaggi del registro. *. Come lo posso fare? Ho trovato questo post ma li ottengo ancora. (Io uso un decompilatore per controllare l’offuscamento).
Il proguard-project.txt è il seguente:

-injars libs/In.jar -outjars libs/Out.jar #-libraryjars /lib/rt.jar -libraryjars C:/Users/thomas/android-sdks/platforms/android-7/android.jar -dontpreverify -repackageclasss '' -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); } -keepclassswithmembernames class * { native ; } -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(...); } 

Qualsiasi aiuto sarebbe apprezzato.
Grazie.

Questo rimuove solo tutto il Log.d(TAG, "..."); e l’errore Log.e(TAG, "...") chiama:

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

Per rimuovere tutte le chiamate di registro, usa semplicemente questo:

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

La configurazione predefinita di Proguard Android disabilita l’ottimizzazione. Per triggersrlo, nel file project.properties del progetto utilizzare proguard-android-optimize.txt anziché proguard-android.txt

Per tutti quelli che non riescono a girare la testa in cerca di guardie, devi assicurarti di fare due cose.

1: da @yorkw

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

2: da @Gallal

Nel file project.properties del progetto, utilizzare:

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

invece di

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

Questo perché hai due opzioni proguard “out of the box” poiché sono incluse nel sdk

android-adk > tools > proguard

Che contiene due file:

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

Spero che aiuti qualcun altro sulla linea.

Se hai Android Studio, devi modificare il build.gradle della tua applicazione principale.

Nel file gradle, devi specificare l’utilizzo di proguard-android-optimize.txt come file predefinito.

 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' } } 

In realtà, nel file proguard-android.txt predefinito, l’ottimizzazione è disabilitata con i due flag:

 -dontoptimize -dontpreverify 

Il file proguard-android-optimize.txt non aggiunge quelle linee, quindi ora gli assumenosideeffects possono funzionare.

Quindi, come detto in altre risposte per Eclipse, è sufficiente aggiungere al file proguard principale la riga:

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