Android - 是否可以将输出抑制为ddms

时间:2012-03-16 17:04:07

标签: android-manifest google-play ddms android

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

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

3 个答案:

答案 0 :(得分:0)

以下是我的工作。它可能没有您期望的那么优雅,但它有效:

public static final boolean DEBUG_ON = true;

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

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

答案 1 :(得分:0)

如果你不使用proguard,你必须自己管理日志,并在清单文件中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);
    }
}

答案 2 :(得分:0)

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

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

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