【问题标题】:Android Removal of Log.d and e.printStackTrace instructions before uploading to marketAndroid 在上传到市场之前删除 Log.d 和 e.printStackTrace 指令
【发布时间】:2012-03-05 09:01:16
【问题描述】:

我的问题很简单。在将我的应用上传到 Android 市场之前,我应该删除 Log.d/e/i/v 和 e.printStackTrace 指令吗?

【问题讨论】:

标签: android logging google-play


【解决方案1】:

如果可能的话,是的,这是一个很好的应用程序开发实践,但是必须正确处理e.printStack,以防止您的应用程序强制关闭不必要的异常。为此,您可以在所有 catch 块中使用 Log.e(TAG, e.toString());。这将保留有关您的应用程序行为的一些必要信息,您还可以轻松获取有关您的应用程序的任何强制关闭或异常的信息。

【讨论】:

    【解决方案2】:

    当您混淆您的应用程序时,Log.debug 指令会自动被删除。见链接:

    Android Proguard, removing all Log statements and merging packages

    【讨论】:

      【解决方案3】:

      您应该使用OfCource,特别是如果您的应用程序非常依赖性能(例如具有快速帧速率的游戏),否则打印日志会消耗大量性能 正确的做法是使用类似 isLoggable 的标志,如果设置为 false,则不会打印日志。

      【讨论】:

        【解决方案4】:

        这实际上取决于应用程序投放市场后的生命周期。

        如果您不能信任您的用户提供详细的错误报告(一般来说,对于与工程相关的应用程序,您可以希望某些用户具有提交详细崩溃报告的敏锐度),那么就没有理由膨胀 Android Log .

        另一方面,一些错误是heisenbugs,在您添加日志语句后可能会消失,因此很难找到它们。

        这真的是一个品味问题 - 我提供了一个构建时开关,将它们包含在调试构建中,但不包含在发布构建中。我通常会等到应用程序通过 beta 后才能完全禁用调试日志。

        【讨论】:

          【解决方案5】:

          我不知道你是否必须删除它。 如果我将一个项目上传到市场,我会得到同一个应用程序的 2 个版本。

          1. 带有 println 和日志
          2. 没有 println 和日志

          删除它们总是会让应用运行得更快一点(很少)。

          【讨论】:

            【解决方案6】:

            你可以看看here,他们建议你禁用日志记录:

            确保您停用日志记录并禁用调试选项 在构建应用程序以进行发布之前。您可以停用 通过删除源文件中对 Log 方法的调用来记录。

            但是,您应该保留一些日志记录,例如打印异常堆栈跟踪等,因为如果您删除它们,以后调试可能的崩溃可能会遇到很多麻烦。

            【讨论】:

              【解决方案7】:

              我只是创建自己的 Log 类并为 android.util.Log 方法构建包装器方法,在写入日志之前检查 BuildConfig.DEBUG

              【讨论】:

                【解决方案8】:

                要删除对 Log 类的调用,请将以下内容添加到 proguard-rules 文件中:

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

                【讨论】:

                  猜你喜欢
                  • 2012-12-10
                  • 2013-10-31
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-01-05
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多