2017-01-09 17 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), используйте следующие правила Proguard для режима выпуска –

+1

что вы означает, что я развиваюсь? –

+0

вы хотите отключить журналы, когда они будут в режиме отладки? –

ответ

2

Просто используйте статическую переменную debug так:

if(debug){ 
//do something 
} 

И установить debug в false при отпускании файла 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, попробуйте воспользоваться градиентом.

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