2012-03-16 68 views
2

DDMS適用於調試,但是當您準備發佈應用程序時,當USB連接時它將將所有此信號發送到用戶的計算機似乎過分了。Android - 是否可以將輸出抑制爲ddms

是否可以抑制輸出到ddms?如果是這樣,怎麼樣?

+2

http://stackoverflow.com/questions/5553146/disable-logcat-output-completely-in-release-android-app – Emran 2012-03-16 17:11:56

回答

0

以下是我所做的。它可能不是因爲你期待什麼優雅,但它的工作原理:

public static final boolean DEBUG_ON = true; 

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

然後,只需改變DEBUG_ON的價值,當你釋放你的應用程序。

+0

看來除了'Log'以外,很多其他的東西都被髮送到ddms。 .. – ina 2012-03-16 17:15:37

+0

你有什麼特別的擔心嗎? ADT在生產版本中自動關閉一些內容:http://stackoverflow.com/questions/4580595/what-would-happen-if-android-app-is-released-with-debuggable-on – Shellum 2012-03-16 17:24:42

0

,如果你不使用proguard的,你必須管理的登錄自己和清單文件使dubuggable假

<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

請記住,並非您在DDMS中看到的所有內容都來自您的應用程序。在幕後DDMS實際上是使用adb在設備上運行logcat來輸出所有應用程序發送日誌記錄信息的系統日誌。當連接到adb並運行logcat時,此信息僅通過USB發送。對於大多數用戶來說,這通常不會被輸出。雖然你應該清理你的應用程序中的調試輸出爲最小化,但不需要擔心其他輸出。

ADT現在通常會爲您在清單中正確設置可調試屬性,假設您根本沒有將它添加到清單中。清單調試屬性控制着調試工具(DDMS)是否能夠連接到正在運行的進程。

使用編譯時間標誌來啓用或禁用調試的另一種方法是使用Log.isLoggable (String tag, int level) api與adb shell setprop結合使用這雖然有點棘手。