【问题标题】:Remove all debug logging calls from third-party lib/sdk (Proguard is not working)从第三方 lib/sdk 中删除所有调试日志记录调用(Proguard 不工作)
【发布时间】:2016-11-22 09:29:49
【问题描述】:

我尝试了很多解决方案 例如 Remove all debug logging calls before publishing: are there tools to do this?

但是,当我查看 logcat 时。日志仍然显示。我的应用程序的日志消失了,但第三方的日志仍然存在。

这是我的 proguard 配置。

-dontwarn **
-target 1.7
#-dontusemixedcaseclassnames
#-dontskipnonpubliclibraryclasses
#-dontpreverify
-verbose

-optimizations !code/simplification/arithmetic,!code/allocation/variable
-keep class **
-keepclassmembers class *{*;}
-keepattributes *

-dontskipnonpubliclibraryclasses
#-dontobfuscate
-forceprocessing
-optimizationpasses 5

-keep class * extends android.app.Activity
-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(...);
}

这是我的 gradle 文件配置

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            debuggable false
            jniDebuggable false
            signingConfig signingConfigs.config
        }
        debug {
           proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            minifyEnabled true
            debuggable false
            zipAlignEnabled true
            jniDebuggable false
        }
    }

出于安全原因,客户希望删除所有日志,甚至是第三方库或 SDK 中的日志

【问题讨论】:

  • 这就是为什么外部日志工具在 Github 上的原因,你可以通过一个方法调用来禁用登录。无法禁用 Logcat。下载示例日志工具,重构消息以使用它,并在发布版本中禁用。
  • 客户想要删除所有日志,甚至是第三方库或SDK中的日志。
  • ctrl + shif + f > 输入 log.d > 并删除该行。
  • 这仅适用于我项目中的源代码。但不是来自第三方 lib/sdk 的日志。

标签: android android-studio logging gradle proguard


【解决方案1】:

ProGuard 将只能删除应用程序代码中的日志记录调用,即正在处理并包含在您自己的应用程序中的代码。 Android 运行时执行的任何日志调用都无法删除,因为运行时安装在每台设备上,显然无法提前修改。

查看您的规则和 gradle 文件,设置看起来是正确的,并且也适用于我删除对 android.util.Log 的调用。确保您使用的是最新版本的 ProGuard(例如 5.2.1 或更高版本)。此外,您的 release buildType 中仍然禁用了 ProGuard,您需要将 minifyEnabled 设置为 true 才能启用它。

【讨论】:

    【解决方案2】:

    您需要检查您的第三方使用哪种类型的日志记录库,并基于此您可以禁用每个库的日志记录。

    如果您的第三方库像 Logger.getLogger(LIBRARY_CLASS.class.getName()); 那样使用 java 中的 Logger,那么您可以在应用程序类 onCreate() 中调用如下:

    LogHelper.INSTANCE.setRootLoggerLevel(Level.OFF);
    

    LogHelper 类代码:

     object LogHelper {
    
     /**
     * set root logger log level
     *
     * @param level maximum allowed log level[Level]
     */
    fun setRootLoggerLevel(level: Level) {
        val rootLogger = LogManager.getLogManager().getLogger("")
        rootLogger.level = level
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多