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(...);
}
Любая помощь будет оценена.
Спасибо.
Ответы
Ответ 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(...);
}