Подтвердить что ты не робот

Android Proguard не удаляет все сообщения журнала

Я хочу создать запутанное приложение для Android. Для этого я использую ProGuard. Я хотел бы автоматически удалить все сообщения журнала. *. Как я могу это сделать? Я нашел эту статью, но я все равно получаю их. (Я использую декомпилятор для проверки обфускации).
Proguard-project.txt является следующим:

-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(...);
}

Любая помощь будет оценена. Спасибо.

4b9b3361

Ответ 1

Это приведет к удалению всех отладочных Log.d(TAG, "..."); и ошибок Log.e(TAG, "..."):

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

Чтобы удалить все вызовы журналов, просто используйте это:

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

Ответ 2

Конфигурация Android Proguard по умолчанию отключает оптимизацию. Чтобы включить его, в файле project.properties проекта используется proguard-android-optimize.txt вместо proguard-android.txt

Ответ 3

Для тех, кто не может обернуться вокруг защитника, вы должны убедиться, что делаете две вещи.

1: От @yorkw

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

2: Из @Gallal

В вашем проекте project.properties используется файл:

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

вместо

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

Это потому, что у вас есть две опции proguard "из коробки", поскольку они включены в sdk

android-adk > tools > proguard

Что содержит два файла:

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

Надеюсь, что кто-то поможет в этом.

Ответ 4

Если у вас есть Android Studio, вам необходимо изменить build.gradle вашего основного приложения.

В вашем файле gradle вы должны указать использование proguard-android-optimize.txt в качестве файла по умолчанию.

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

Собственно, в файле proguard-android.txt по умолчанию оптимизация отключается с помощью двух флагов:

-dontoptimize
-dontpreverify

Файл proguard-android-optimize.txt не добавляет эти строки, поэтому теперь assumenosideeffects может работать.

Затем, как сказано в других ответах для Eclipse или иначе, вам просто нужно добавить в свой основной файл proguard строку:

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