2012-09-12 14 views
23

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 il post this ma li ottengo comunque. (Io uso un decompilatore per controllare l'offuscamento).
Il proguard-project.txt è la seguente:
Proguard Android non rimuove tutti i messaggi di 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(...); 
} 

Tutto l'aiuto sarebbe apprezzato.
Grazie.

risposta

38

Questo rimuove solo il debug tutti Log.d(TAG, "..."); ed errore Log.e(TAG, "...") chiamate:

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

Per rimuovere tutte le chiamate di registro, è sufficiente utilizzare questo:

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

Hi @EricLafortune Puoi spiegare il tuo commento? –

+1

@EricLafortune metodo 'wait' in ** android.util.Log ** ?? –

18

La configurazione di default di Android Proguard disabilita ottimizzazione. Per abilitarlo, nel file project.properties del tuo progetto usa proguard-android-optimize.txt invece di proguard-android.txt

12

Per chiunque non riesca a girare la testa intorno a pro-guardia, devi fare certo che fai due cose.

1: Da @yorkw

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

2: Da @Gallal

In uso del file project.properties del progetto:

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é tu h ave due opzioni Proguard "out of the box", in quanto essi sono inclusi nel SDK

android-adk > tools > proguard

che contiene due file:

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

Speranza che aiuta a qualcun altro su tutta la linea.

+0

Il file 'project.properties' è (ora) chiamato' local.properties'? –

+2

Sono abbastanza sicuro che tutto sia diverso ora se usi Android Studio. Non pensare che sia nemmeno chiamato proguard. Pensa che è chiamato "minify" che consente a proguard di funzionare. Detto ciò. QUESTE ISTRUZIONI SONO SOLO PER ECLIPSE. –

+0

Per qualche motivo vedo ancora ** chiamate di registro ** nella mia classe. –

7

Se si dispone di Android Studio, è necessario modificare lo build.gradle dell'applicazione principale.

Nel file gradle, è necessario 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 di default proguard-android.txt, ottimizzazione è disabilitato con le due bandiere:

-dontoptimize 
-dontpreverify 

Il file proguard-android-optimize.txt non aggiunge quelle linee, così ora assumenosideeffects può lavorare.

Poi, come detto in altre risposte per Eclipse o altro, basta aggiungere al file Proguard principale della linea:

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