¿Desactivar LogCat Output COMPLETAMENTE en la versión de la aplicación de Android?

Cerrar la salida de LogCat de mi propia aplicación antes de lanzar una aplicación al mercado es sencillo. También sé cómo filtrar selectivamente el mensaje LogCat por etiqueta y / o id para mi propia conveniencia de depuración.

Pero ahora estoy interesado en algo que puede ser mucho más difícil (¿quizás imposible?): Deshabilite todos los resultados de LogCat, incluidos especialmente aquellos provenientes de servicios de terceros como TtsService, GoogleLoginService, etc.

es posible?

Para aclarar más: no estoy interesado en filtrar mensajes para mí. Estoy bastante interesado en deshabilitar los mensajes de terceros para quien descargue mi aplicación de Android Market. es posible?

Puede utilizar ProGuard para eliminar por completo cualquier línea en la que no se utilice un valor de retorno, al decirle a ProGuard que no supondrá ningún problema.

El siguiente fragmento proguard.cfg indica que se eliminen las llamadas Log.d, Log.v y Log.i.

-assumenosideeffects class android.util.Log { public static *** d(...); public static *** w(...); public static *** v(...); public static *** i(...); } 

El resultado final es que estas líneas de registro no están en su versión apk y, por lo tanto, cualquier usuario con logcat no verá los registros de d / v / i.

si no usa proguard, tiene que administrar el registro usted mismo y en el archivo de manifiesto hacer que el doblaje sea falso

  

Aquí mi clase de registro personalizado

 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); } } 

La gran respuesta proporcionada por David Caunt no parece funcionar para las reglas definidas en proguard-android-optimize.txt .

En lugar de utilizar el comodín *** , las versiones actuales de ProGuard parecen esperar el calificador de tipo del parámetro de retorno:

 -assumenosideeffects class android.util.Log { public static int d(...); public static int w(...); public static int v(...); public static int i(...); public static int wtf(...); } 

Puede poner la depuración en falso en la versión buildTypes.

 buildTypes { release { debuggable false ... } } 

En el conjunto de archivos de app build.gradle:

 release { minifyEnabled true …… } 

En proguard-rules.pro puesto:

 -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); public static *** e(...); } -ignorewarnings 

Funcionó para mí

Usualmente hago lo siguiente:

if (BuildConfig.DEBUG) Log.i(TAG, msg);

sin embargo, si tienes muchas dependencias (bibliotecas) y escribieron mal, simplemente utiliza https://stackoverflow.com/a/5553290/4548520

hacer líneas más cortas:

 private final static boolean DEBUG = BuildConfig.DEBUG; if (DEBUG) Log.i(TAG, msg_1); if (DEBUG) Log.e(TAG, msg_error_2);