Proguard没有删除日志调用

时间:2012-02-17 21:18:51

标签: android proguard

使用Ant编译我的应用程序时我可以看到详细的Proguard输出,并且我已经设置了删除日志语句(见下文),但是当我运行发行版apk时,我试图删除的所有日志语句都在那里

我有2个项目,每个项目都包含一个共同的项目。 2个主项目和公共项目都有一个proguard.cfg文件,所有文件都包含删除日志语句的代码段。

我有什么遗失的东西吗?

**我的所有日​​志语句都是Log.d(...)

proguard.cfg

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

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

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

3 个答案:

答案 0 :(得分:3)

这里你的proguard文件没问题,但是你可能会遗漏一些细节。

在你的gradle文件中你可能有这样的东西:

buildTypes {
    release {
        minifyEnabled true

        proguardFiles getDefaultProguardFile('proguard-android.txt), 'proguard-rules.pro'
    }
}

检查getDefaultProguardFile('proguard-android'),如果您打算对其进行优化,则应将其更改为getDefaultProguardFile('proguard-android-optimize.txt')

我花了一些时间才意识到这一点,看到了你的问题,但仍然无法删除我的代码上的Log电话。所以我发现这个链接解释了更改为优化文件以进行优化的必要条件。

https://developer.android.com/tools/help/proguard.html#enabling-gradle

答案 1 :(得分:1)

如果没有Proguard优化,您无法使用assumenosideeffects

答案 2 :(得分:0)

您可以使用pro-guard来删除或评论所有日志消息,而不是删除或注释掉所有日志消息。创建一个实用程序类,它基本上是android日志系统的包装器

public class Util{

    public static boolean showLogs = true;
    public static String myTag = 'My Tag';

    public static void logD(String message){
        if (Util.showLogs)      
            Log.d(myTag, message);
    }
}

之前我编译我的应用以进行分发我只需调用showLogs = true;然后所有日志消息都被压缩

您可以轻松扩展此类,以允许您指定标记并生成多个调试消息。