Android - можно ли подавить вывод в ddms

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

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


person ina    schedule 16.03.2012    source источник
comment
stackoverflow.com/ вопросы/5553146/   -  person Emran    schedule 16.03.2012


Ответы (3)


Я делаю следующее. Вероятно, это не так элегантно, как вы ожидаете, но это работает:

public static final boolean DEBUG_ON = true;

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

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

person Shellum    schedule 16.03.2012
comment
Вас что-то конкретное беспокоит? ADT автоматически отключает некоторые вещи в производственных выпусках: title="что произойдет, если приложение Android будет выпущено с возможностью отладки"> stackoverflow.com/questions/4580595/ - person Shellum; 16.03.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);
    }
}
person Win Myo Htet    schedule 16.03.2012

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

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

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

person cistearns    schedule 16.03.2012