【问题标题】:How to remove Log.d() calls in release build of an Android app?如何在 Android 应用的发布版本中删除 Log.d() 调用?
【发布时间】:2015-10-11 16:09:44
【问题描述】:

我注意到我在 Eclipse 中通过以下方式制作的发布版本:

Android 工具 -> 导出签名的应用程序包 ...

我的 proguard-project.txt 包含:

-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(...);
}

然而,如果我在设备上运行应用程序并使用 CatLog 查看日志,我会发现所有不应该存在的 Log.d()、Log.v() 消息。 还有什么我应该设置的吗? 我花了很多时间在谷歌上搜索,但没有关于该主题的明确说明。嗯,我发现的大多数事情都是有类似问题但没有解决方案的人。

【问题讨论】:

  • 您的 proguard 配置(项目特定或 SDK 中的配置)是否包含 -dontoptimize
  • @laalto 是的。此选项是否与 -assumenosideeffects 相关联?

标签: android android-proguard


【解决方案1】:

确保您的 proguard 配置中没有 -dontoptimize。删除“没有副作用”的方法调用的是 proguard 优化器。

SDK 默认proguard-android.txt 中包含-dontoptimize。请改用proguard-android-optimize.txt,并且不要在项目特定的proguard 配置中添加-dontoptimize

能否请您说明一些我可以阅读该主题的来源。如果存在当然。

好吧,对于初学者来说,-assumenosideeffects 列在 documentation 的优化选项下。

另外一件麻烦事是,我读到使用 proguard-android-optimize.txt 可能会导致某些设备出现问题。所以,这是一种 od catch 22 的情况。

Proguard 通常会产生副作用。您需要彻底测试您的 proguard 处理的应用程序。


如果你想在不使用 proguard 的情况下从发布版本中删除日志记录,你可以例如添加

if (BuildConfig.DEBUG)

在每个日志调用之前,BuildConfig 是 Gradle Android 插件生成的构建配置。由于DEBUG 有一个编译时常量,Java 编译器在发布配置上看到条件永远不会为真,因此不会在条件块内发出字节码。

【讨论】:

  • 谢谢。您能否说明一些我可以阅读该主题的来源。如果存在当然。另一件麻烦事是,我读到使用 proguard-android-optimize.txt 可能会导致某些设备出现问题。所以,这是一种 od catch 22 的情况。
  • 谢谢。我已接受并赞成您的答案,因为它表明我的设置存在错误。事情还不清楚,我已经发布了另一个问题:stackoverflow.com/questions/33070599/…
【解决方案2】:

你试过了吗?

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

【讨论】:

    【解决方案3】:

    在我的应用程序中,我使用自己的类包装了记录器调用,该类在记录之前检查布尔值“debugMode”。 这样,将布尔标志更改为 false 会导致没有日志(实际上,这只是一个概念,因为我也希望允许不同级别的日志记录,但想法是相同的)。 您可以根据需要配置每个级别,因此您仍然会看到严重的日志,但会排除调试日志。

    【讨论】:

    • 虽然这将删除日志输出,但它不会删除日志调用,除非您在调用时对常量进行布尔检查站点(允许编译器省略调用)。有些人希望完全删除日志调用以提高性能、二进制大小或混淆。
    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多