44

我正在尝试使用 proguard 删除所有日志:我在 proguard-project.txt 中输入了以下行:

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

我的 project.properties 看起来像这样:

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

尽管如此,日志继续显示在我的应用程序中。我在这里到底做错了什么?

4

3 回答 3

96

你不应该指定'*'通配符,因为它包括像'Object#wait()'这样的方法。更好地明确列出方法:

-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

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

或使用当代的Android Gradle 插件

buildTypes {
    releaseSomeBuildType {
        ...
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'your-proguard-file.pro'
    }
}   
于 2012-11-11T00:51:24.240 回答
16

已经很晚了,我遇到了同样的问题。我正在使用 Android Studio 1.3,这就是我所做的。

  1. 在发布版本中添加要剥离的日志方法proguard-android-optimize.txt

    -assumenosideeffects class android.util.Log {
        public static boolean isLoggable(java.lang.String, int);
        public static int d(...);
        public static int w(...);
        public static int v(...);
        public static int i(...);
    }
    
  2. 在您的 build.gradle (Module: app) 中,将 proguard-android-optimize.txt 设置为默认的 proguard 文件,而不是 proguard-android.txt:

    buildTypes {
        release {
            minifyEnabled true
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    

这是因为在proguard-android.txt优化中默认情况下使用标志关闭

-dontoptimize
-dontpreverify 

这对我有用,希望对其他人有帮助。

于 2015-09-30T05:48:36.540 回答
7

你需要这样做:

-assumenosideeffects class android.util.Log {
public static int d(...);
public static int v(...);
public static int i(...);
public static int w(...);
public static int e(...);
public static int wtf(...);
    }

并扩展您正在使用的所有日志方法。

于 2012-11-04T13:10:58.143 回答