DDMS适合调试,但是当你准备好发布应用程序时,它似乎过多,它会在连接USB时将所有这些信号发送到用户的计算机。
是否可以抑制输出到ddms?如果是这样,怎么样?
答案 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
结合使用。但这有点棘手。