DDMS хорош для отладки, но когда вы готовы выпустить приложение, кажется чрезмерным, что он будет отправлять весь этот сигнал на компьютер пользователя при подключении USB.
Можно ли подавить вывод в ddms? Если да, то как?
DDMS хорош для отладки, но когда вы готовы выпустить приложение, кажется чрезмерным, что он будет отправлять весь этот сигнал на компьютер пользователя при подключении USB.
Можно ли подавить вывод в ddms? Если да, то как?
Я делаю следующее. Вероятно, это не так элегантно, как вы ожидаете, но это работает:
public static final boolean DEBUG_ON = true;
//Log something
if (!DEBUG_ON) Log.d("tag", "my log message");
Затем просто измените значение DEBUG_ON при выпуске приложения.
если вы не используете 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);
}
}
Имейте в виду, что не все, что вы видите в DDMS, взято даже из вашего приложения. За кулисами DDMS фактически использует adb
для запуска logcat
на устройстве для вывода системного журнала, в который все приложения отправляют информацию журнала. Эта информация отправляется через USB только при подключении к adb и запуске logcat. Для большинства пользователей это обычно не выводится. Хотя вы должны свести к минимуму выходные данные отладки в своем приложении, вам не нужно беспокоиться о других выходных данных.
Теперь ADT будет правильно устанавливать отладочный атрибут в вашем манифесте, если вы вообще не добавите его в манифест. Отладочный атрибут манифеста определяет, могут ли средства отладки (DDMS) подключаться к запущенному процессу.
Альтернативный подход к использованию флагов времени компиляции для включения или отключения отладки заключается в использовании Log.isLoggable (String tag, int level)
API в сочетании с adb shell setprop
Однако это немного сложнее.