【问题标题】:Remove logs using proguard doesn't work使用 proguard 删除日志不起作用
【发布时间】:2018-08-16 14:11:52
【问题描述】:

我需要从我的发布应用类型中删除所有日志记录。我已经尝试配置 proguard 为我做这件事。我的配置大多与此处提供的配置相匹配:proguard doesn't remove logs。 我已将 proguard-android.txt 更改为 proguard-android-optimize.txt 但没有运气。在阅读 Proguard 手册并检查以下输出后:

-whyareyoukeeping 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(...);
   public static int wtf(...);
} 

得知无法删除此内容,原因是:

Explaining why classes and class members are being kept...
Printing usage to [...]...
android.util.Log
  is a library class.
android.util.Log: boolean isLoggable(java.lang.String,int)
  is a library method.
android.util.Log: int v(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int v(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int i(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int i(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int w(java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int d(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int d(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int e(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int e(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.String)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.Throwable)
  is a library method.
android.util.Log: int wtf(java.lang.String,java.lang.String,java.lang.Throwable)
  is a library method.

这可能是什么原因?也许其他一些 Proguard 选项?是否有任何其他选项可以强制删除日志?

【问题讨论】:

    标签: android proguard android-proguard


    【解决方案1】:

    您需要指定 ProGuard 应该使用如下配置删除这些日志记录调用:

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

    请记住,您需要启用优化才能真正删除这些调用。为此,请使用此默认配置:

    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
    

    【讨论】:

      【解决方案2】:

      在 Guardsquare 支持的帮助下,我能够找出问题所在。其中一个库在其 ProGuard 配置文件中有 -dontoptimize。有助于缩小此问题的选项是 -printconfiguration [filename]

      文档。参考 - https://www.guardsquare.com/en/products/proguard/manual/usage#generaloptions

      【讨论】:

        猜你喜欢
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        相关资源
        最近更新 更多