我正在尝试将proguard配置为仅从我的Android应用程序中删除对android.util.Log的调用(针对发布版本)。我特别不希望proguard对代码进行任何混淆或缩小。
这是我尝试过的配置,但它没有删除Log
次调用(我假设是因为-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 {
*;
}
我甚至可以用proguard询问什么?
答案 0 :(得分:30)
您可以在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(...);
}
此选项仅在未禁用优化时才相关,例如proguard-android.txt
。您必须在proguard-android-optimize.txt
中指定project.properties
:
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
如果您愿意,可以禁用收缩和混淆。如果您愿意,还可以保留应用程序的内部API:
-keep class myapp.** { *; }
从ProGuard的角度来看,禁用这些步骤并保持所有代码当然不是最佳选择。
答案 1 :(得分:12)
在build.gradle中
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
在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(...);
}