Android - возможно ли подавить вывод в ddms - PullRequest
2 голосов
/ 16 марта 2012

DDMS хорош для отладки, но когда вы готовы выпустить приложение, кажется чрезмерным, что оно будет отправлять весь этот сигнал на компьютер пользователя при подключении через USB.

Можно ли подавить вывод в ддмс?Если да, то как?

Ответы [ 3 ]

0 голосов
/ 17 марта 2012

если вы не используете proguard, вы должны сами управлять журналом и в файле манифеста сделать 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);
    }
}
0 голосов
/ 17 марта 2012

Имейте в виду, что не все, что вы видите в DDMS, даже из вашего приложения.За кулисами DDMS фактически использует adb для запуска logcat на устройстве, чтобы вывести системный журнал, в который все приложения отправляют информацию о регистрации.Эта информация отправляется только через usb, когда подключено к adb и запущен logcat.Для большинства пользователей это обычно не выводится.Хотя вы должны очистить выходные данные отладки в своем приложении до минимума, вам не нужно беспокоиться о других выходных данных.

ADT теперь обычно правильно устанавливает атрибут debuggable для вас в вашем манифесте, при условии, что вы не будетедобавить его в манифест вообще.Атрибут отладочного манифеста управляет возможностью подключения инструментов отладки (DDMS) к вашему запущенному процессу.

Альтернативный подход к использованию флагов времени компиляции для включения или отключения отладки состоит в использовании Log.isLoggable (String tag, int level) API в сочетании сadb shell setprop Хотя это немного сложнее.

0 голосов
/ 16 марта 2012

Вот что я делаю.Вероятно, он не такой элегантный, как вы ожидаете, но он работает:

public static final boolean DEBUG_ON = true;

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

Затем просто измените значение DEBUG_ON при выпуске приложения.

...