2013-03-22 10 views
15

Próbuję skonfigurować proguard, aby TYLKO usunąć połączenia z android.util.Log z mojej aplikacji na Androida (dla wersji release). W szczególności nie chcę, aby proguard robił jakiekolwiek zaciemnianie lub korygowanie kodu.Jak skonfigurować proguard, aby TYLKO usunąć wywołania logowania Android

Jest to konfiguracja Próbowałem, ale nie usuwa połączenia Log (zakładam, ze względu na -keep class **)

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 

-keep class ** { 
    *; 
} 

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

Czy to pytam nawet możliwe PROGUARD?

Odpowiedz

30

Można usunąć rejestrowania rozmów z tej opcji w proguard-project.txt:

-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    public static int e(...); 
} 

Ta opcja ma zastosowanie tylko w przypadku optymalizacji nie jest wyłączony, podobnie jak w proguard-android.txt. Trzeba określić proguard-android-optimize.txt zamiast w project.properties:

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

Można wyłączyć kurczy i zaciemniania, jeśli chcesz. Można również zachować wewnętrzną API aplikacji z optymalizacji, jeśli chcesz:

-keep class myapp.** { *; } 

Wyłączenie kroki i utrzymując cały kod oczywiście nie jest optymalna z punktu widzenia PROGUARD.

+0

wydaje się, że problem był domyślny globalny PROGUARD config wyłącza optymalizację. Na razie upuściłem proguard i zapakowałem moje zgłoszenia logujące za pomocą flagi debugowania. W każdym razie przyjmuję odpowiedź, ponieważ rozwiązuje ona moje oryginalne pytanie. – UloPe

+0

Zauważyłem, że połączenie internetowe może nadal pokazywać się w BasicNetwork.logSlowRequests i Request.finish po tym ... w jaki sposób usunąć to? – askilondz

+0

@Eric Mógłbyś podać jakieś źródło na ten temat. To nie tak, że ci nie wierzę. Ale ta sprawa jest niewyjaśniona i źródłem wielu oparzeń. – f470071

12

W build.gradle

buildTypes { 

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

W proguard-rules.pro

-dontwarn ** 
-target 1.7 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 

-optimizations !code/simplification/arithmetic,!code/allocation/variable 
-keep class ** 
-keepclassmembers class *{*;} 
-keepattributes * 

#This will not remove error log 
-assumenosideeffects class android.util.Log { 
    public static boolean isLoggable(java.lang.String, int); 
    public static int v(...); 
    public static int i(...); 
    public static int w(...); 
    public static int d(...); 
    #public static int e(...); 
} 
+1

To nie działa dla mnie .. Kopiuję/Wklejam kod i nadal mam dzienniki .. – Majstor

+0

Zobaczysz dzienniki błędów. Usuń # przed publicznym statycznym int e (...); i przed publicznym statycznym boolean isLoggable (java.lang.String, int); Upewnij się również, że uruchamiasz Release build. Zmiany dotyczyły wersji Release. –

+1

Myliłem się, Sandeep. To działa. Przepraszam. Brakowało mi zmiany proguard-android.txt -> proguard-android-optimize.txt – Majstor

Powiązane problemy