gpt4 book ai didi

Android:如何使用 ProGuard 删除 SLF4J 调试日志记录

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:25 33 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 SLF4J 进行日志记录。在发布版本中,我不希望出现所有调试日志,因此我尝试使用 ProGuard 删除它们。但是日志语句仍然打印到 logcat 控制台,我无法自己弄清楚我做错了什么。这是我第一次使用 ProGuard,所以非常感谢任何帮助!谢谢!

MainActivity.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MainActivity {

private static final Logger log = LoggerFactory
.getLogger(MainActivity.class.getSimpleName());

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

log.debug("Starting application.");
}
}

project-proguard.txt

-assumenosideeffects class org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}

project-proguard.txt(扩展为第一个版本不起作用)

-assumenosideeffects class org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects interface org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects class * implements org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
}
-assumenosideeffects class * implements org.slf4j.Logger {
public void trace(java.lang.String);
public void trace(java.lang.String, java.lang.Object);
public void trace(java.lang.String, java.lang.Object, java.lang.Object);
public void trace(java.lang.String, java.lang.Object[]);
public void trace(java.lang.String, java.lang.Throwable);
public void trace(org.slf4j.Marker, java.lang.String);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Object[]);
public void trace(org.slf4j.Marker, java.lang.String, java.lang.Throwable);
public void debug(java.lang.String);
public void debug(java.lang.String, java.lang.Object);
public void debug(java.lang.String, java.lang.Object, java.lang.Object);
public void debug(java.lang.String, java.lang.Object[]);
public void debug(java.lang.String, java.lang.Throwable);
public void debug(org.slf4j.Marker, java.lang.String);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object, java.lang.Object);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Object[]);
public void debug(org.slf4j.Marker, java.lang.String, java.lang.Throwable);
}

logcat - 调试构建

01-08 11:27:02.105  31142-31142/com.example.android D/MainActivity﹕ Starting application.

logcat - 发布版本(不应该存在!)

01-08 11:30:08.615  26483-26483/? D/MainActivity﹕ Starting application.

最佳答案

我有一个类似的问题,我用两个步骤解决了它。

第一步也是最重要的一步

在您的 gradle 文件中,您必须指定使用 proguard-android-optimize.txt 作为默认文件。

buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

// With the file below, it does not work!
//proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

实际上,在默认的 proguard-android.txt 文件中,优化被两个标志禁用:

-dontoptimize
-dontpreverify

proguard-android-optimize.txt 文件没有添加这些行,所以现在 assumenosideeffects 可以工作了。

第二步

在你自己的proguard-rules.pro文件中,你可以添加:

-assumenosideeffects class * implements org.slf4j.Logger {
public *** trace(...);
public *** debug(...);
public *** info(...);
public *** warn(...);
public *** error(...);
}

关于Android:如何使用 ProGuard 删除 SLF4J 调试日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993701/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com