2017-01-09 76 views
-4

我只需要在開發時在我的應用程序中打印日誌。那麼有沒有像布爾的方式,將決定我的應用程序是否在某種模式,並只允許打印日誌呢?這將節省我每次準備簽名版本時刪除日誌的時間。如何僅在應用程序處於開發模式時打印日誌?

我試圖解決方案,如:

boolean isDebuggable = 0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE); 

和:

if (BuildConfig.DEBUG) { 
    // do something for a debug build 
}` 

他們不喜歡的工作,我希望它。

謝謝。

+2

[刪除使用ProGuard登錄電話](http://stackoverflow.com/questions/13218772/removing-log-call-using-proguard),用於發佈模式 –

+1

這些proguard的規則可能重複你意味着我正在發展? –

+0

你想在調試模式下關閉日誌嗎? –

回答

2

只需使用一個靜態變量debug這樣的:

if(debug){ 
//do something 
} 

並設置debugfalse當您鬆開apk文件。

或者創建自己的自定義日誌方法:

可用於打印日誌靜態單一的方法
public static void logInfo(String tag, String msg){ 
    if(DEBUG){ 
     Log.i(tag,msg); 
    } 
} 
+0

謝謝。應該是這樣。得到它了。 – Pritish

1

無論哪種方式,像圖所示:

/** 
* @param TAG 
* @param Message 
* @param LogType 
*/ 
public static void Log(String TAG, String Message, int LogType) { 
    switch (LogType) { 
     // Case 1- To Show Message as Debug 
     case 1: 
      Log.d(TAG, Message); 
      break; 
     // Case 2- To Show Message as Error 
     case 2: 
      Log.e(TAG, Message); 
      break; 
     // Case 3- To Show Message as Information 
     case 3: 
      Log.i(TAG, Message); 
      break; 
     // Case 4- To Show Message as Verbose 
     case 4: 
      Log.v(TAG, Message); 
      break; 
     // Case 5- To Show Message as Assert 
     case 5: 
      Log.w(TAG, Message); 
      break; 
     // Case Default- To Show Message as System Print 
     default: 
      System.out.println(Message); 
      break; 
    } 
} 

public static void Log(String TAG, String Message) { 
    AppDelegate.Log(TAG, Message, 1); 
} 

/* Function to show log for error message */ 
public static void LogD(String Message) { 
    AppDelegate.Log(Tags.DATE, "" + Message, 1); 
} 

/* Function to show log for error message */ 
public static void LogDB(String Message) { 
    AppDelegate.Log(Tags.DATABASE, "" + Message, 1); 
} 

/* Function to show log for error message */ 
public static void LogE(Exception e) { 
    if (e != null) { 
     AppDelegate.LogE(e.getMessage()); 
     e.printStackTrace(); 
    } else { 
     AppDelegate.Log(Tags.ERROR, "exception object is also null.", 2); 
    } 
} 

/* Function to show log for error message */ 
public static void LogE(OutOfMemoryError e) { 
    if (e != null) { 
     AppDelegate.LogE(e.getMessage()); 
     e.printStackTrace(); 
    } else { 
     AppDelegate.Log(Tags.ERROR, "exception object is also null.", 2); 
    } 
} 

/* Function to show log for error message */ 
public static void LogE(String message, Exception exception) { 
    if (exception != null) { 
     AppDelegate.LogE("from = " + message + " => " 
       + exception.getMessage()); 
     exception.printStackTrace(); 
    } else { 
     AppDelegate.Log(Tags.ERROR, "exception object is also null. at " 
       + message, 2); 
    } 
} 

/** 
* Funtion to log with tag RESULT, you need to just pass the message. 
* 
* @String Message = pass your message that you want to log. 
*/ 
public static void LogR(String Message) { 
    AppDelegate.Log(Tags.RESULT, "" + Message, 1); 
} 

/** 
* Funtion to log with tag RESULT, you need to just pass the message. 
* 
* @String Message = pass your message that you want to log. 
*/ 
public static void LogI(String Message) { 
    AppDelegate.Log(Tags.INTERNET, "" + Message, 1); 
} 

之後,你只需要編寫登錄應用如:

AppDelegate.LogT("Hello for testing purpose"); 

當你不想顯示日誌,然後去AppDelegate類,只是註釋掉日誌行。而已。我希望你明白。

+0

是的,這可能是一種方法。 – Pritish

+2

是的,那是更簡單的方法。 – bharat7777

2

如果您使用的是Android Studio,那麼嘗試利用gradle文件。

defaultConfig { 
     applicationId "com.your.application.id" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 

     //Defining Log debugging 
     buildConfigField "boolean", "LOG_DEBUG_MODE", "false" 
     buildConfigField "boolean", "LOG_DEBUG_WITH_STACKTRACE_MODE", "false" 
    } 


    buildTypes { 
     debug { 
      testCoverageEnabled = "true" 
      buildConfigField "boolean", "LOG_DEBUG_MODE", "true" 
      buildConfigField "boolean", "LOG_DEBUG_WITH_STACKTRACE_MODE", "true" 
     } 

     release { 
      minifyEnabled true 
      shrinkResources true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
+0

試試吧,謝謝。 – Pritish

相關問題