【发布时间】:2012-04-02 05:53:37
【问题描述】:
DDMS 非常适合调试,但是当您准备发布应用程序时,当 USB 连接时它将所有这些信号发送到用户的计算机似乎有点过分。
是否可以抑制输出到 ddms?如果有,怎么做?
【问题讨论】:
标签: android-manifest google-play ddms android
DDMS 非常适合调试,但是当您准备发布应用程序时,当 USB 连接时它将所有这些信号发送到用户的计算机似乎有点过分。
是否可以抑制输出到 ddms?如果有,怎么做?
【问题讨论】:
标签: android-manifest google-play ddms android
以下是我的工作。它可能不像您期望的那样优雅,但它确实有效:
public static final boolean DEBUG_ON = true;
//Log something
if (!DEBUG_ON) Log.d("tag", "my log message");
然后,只需在发布应用时更改 DEBUG_ON 的值即可。
【讨论】:
如果你不使用proguard,你必须自己管理日志并且在manifest文件中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);
}
}
【讨论】:
请记住,并非您在 DDMS 中看到的所有内容都来自您的应用。在幕后 DDMS 实际上是使用adb 在设备上运行logcat 以输出所有应用程序发送日志信息的系统日志。此信息仅在连接到 adb 并运行 logcat 时通过 USB 发送。对于大多数用户来说,这通常不会被输出。虽然您应该将应用程序中的调试输出清理为最少,但您不必担心其他输出。
ADT 现在通常会在清单中为您正确设置 debuggable 属性,假设您根本没有将它添加到清单中。清单 debuggable 属性控制调试工具 (DDMS) 是否能够连接到您正在运行的进程。
使用编译时标志来启用或禁用调试的另一种方法是将Log.isLoggable (String tag, int level) api 与adb shell setprop 结合使用,但这有点棘手。
【讨论】: