【问题标题】:Android - is it possible to suppress output to ddmsAndroid - 是否可以抑制输出到 ddms
【发布时间】:2012-04-02 05:53:37
【问题描述】:

DDMS 非常适合调试,但是当您准备发布应用程序时,当 USB 连接时它将所有这些信号发送到用户的计算机似乎有点过分。

是否可以抑制输出到 ddms?如果有,怎么做?

【问题讨论】:

标签: android-manifest google-play ddms android


【解决方案1】:

以下是我的工作。它可能不像您期望的那样优雅,但它确实有效:

public static final boolean DEBUG_ON = true;

//Log something
if (!DEBUG_ON) Log.d("tag", "my log message");

然后,只需在发布应用时更改 DEBUG_ON 的值即可。

【讨论】:

【解决方案2】:

如果你不使用proguard,你必须自己管理日志并且在manifest文件中make dubuggable false

<application
    android:name="MyApplication"
    android:icon="@drawable/gift"
    android:label="@string/app_name" android:debuggable="@bool/build_log">

这是我的自定义日志类

public class Lol {

    public static final boolean ENABLE_LOG = true & MyApplication.sDebug;

    private static final boolean DEBUG = true & ENABLE_LOG;

    private static final boolean VERBOSE = true & ENABLE_LOG;

    private static final boolean TEMP = true & ENABLE_LOG;

    private static final boolean WARNING = true & ENABLE_LOG;

    private static final boolean INFO = true & ENABLE_LOG;

    private static final boolean ERROR = true & ENABLE_LOG;

    public static void obvious(String tag, String msg) {
        if (DEBUG) {
            msg = "*********************************\n" + msg
                    + "\n*********************************";
            Log.d(tag, msg);
        }
    }

    public static void d(String tag, String msg) {
        if (DEBUG)
            Log.d(tag, msg);
    }

    public static void d(boolean bool, String tag, String msg) {
        if (TEMP&bool)
            Log.d(tag, msg);
    }

    public static void i(String tag, String msg) {
        if (INFO)
            Log.i(tag, msg);
    }

    public static void e(String tag, String msg) {
        if (ERROR)
            Log.e(tag, msg);
    }

    public static void e(boolean bool, String tag, String msg) {
        if (TEMP&bool)
            Log.e(tag, msg);
    }

    public static void v(String tag, String msg) {
        if (VERBOSE)
            Log.v(tag, msg);
    }

    public static void w(String tag, String msg) {
        if (WARNING)
            Log.w(tag, msg);
    }

    public static String getStackTraceString(Exception e) {
        return Log.getStackTraceString(e);
    }

    public static void w(String tag, String msg, Exception e) {
        if (WARNING)
            Log.w(tag, msg,e);
    }
}

【讨论】:

    【解决方案3】:

    请记住,并非您在 DDMS 中看到的所有内容都来自您的应用。在幕后 DDMS 实际上是使用adb 在设备上运行logcat 以输出所有应用程序发送日志信息的系统日志。此信息仅在连接到 adb 并运行 logcat 时通过 USB 发送。对于大多数用户来说,这通常不会被输出。虽然您应该将应用程序中的调试输出清理为最少,但您不必担心其他输出。

    ADT 现在通常会在清单中为您正确设置 debuggable 属性,假设您根本没有将它添加到清单中。清单 debuggable 属性控制调试工具 (DDMS) 是否能够连接到您正在运行的进程。

    使用编译时标志来启用或禁用调试的另一种方法是将Log.isLoggable (String tag, int level) api 与adb shell setprop 结合使用,但这有点棘手。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2016-03-07
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多