发布的应用程序显示调试字符串?

时间:2013-01-09 10:42:51

标签: android eclipse debugging

  

可能重复:
  Remove all debug logging calls before publishing: are there tools to do this?

也许我误解了这个概念,但不是调试日志消息应该只显示在未发布的应用程序中?

我用“文件” - “导出”编译了我的应用程序,它应该删除代码“Log.d(..)”转储的所有邮件。但是,当我在运行Eclipse的同时运行通过USB连接的这个版本时,我看到各种调试消息在LogCat中公开显示。

我现在有些惊慌 - 据我所知,ProGuard应该在创建发布版本时自动调用,但它似乎将调试注释保留在应用程序中(但在其他方面似乎有效,因为函数名称已被混淆)我也可以在Logcat中看到。)

3 个答案:

答案 0 :(得分:0)

发布版本不会自动删除日志。你不应该(推荐)手动删除它们,因为你需要在开发下一个版本等时将它们添加回来..,

最推荐的方法是使用 Proguard

它的作用是:将删除字节码中的日志,使其在源代码中可用。

实施或使用:

Remove all debug logging calls before publishing: are there tools to do this?

除了删除日志之外,proguard还可以通过多种方式帮助优化您的应用。

http://proguard.sourceforge.net/

答案 1 :(得分:0)

它不会删除日志语句!您可以手动删除它们,并在发布应用时将其作为更新提交。

更好的方法是,创建一个类,如Globals,并在其中加上一个标志,即isDevelopement

public class Globals
{
    static boolean isDevelopment = 1;

    public static void log(String tag, String message)
    {
      if(isDevelopment==1)
         Log.d(tag,message);
    }
}

在您拥有日志语句的每个地方,只需将其称为

即可
Globals.log("TAG", "MESSAGE");

所以这样,当您发布时,您只需将isDevelopment更改为0.并且日志消失。当你正在处理它时,你只需要将它改为1.

希望这有帮助

答案 2 :(得分:0)

我想我找到了问题的原因 - 我有

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

在我当地的proguard-project.txt中,但尽管有这条线

proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android-optimize.txt:proguard-project.txt

在我的project.properties文件中,proguard-project.txt似乎从未被用于任何原因。 我已将日志删除参数添加到我的proguard-android-optimize.txt中,现在可以正常工作,导出应用程序时会删除日志。