ver studio movil log hacer errores depurar debug como aplicacion android release google-play logcat android-logcat

movil - ver errores android studio



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

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?


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í


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 ... } }


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.


Usualmente hago lo siguiente:

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

sin embargo, si tienes muchas dependencias (bibliotecas) y escribieron mal, simplemente utiliza https://.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);


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

<application android:name="MyApplication" android:icon="@drawable/gift" android:label="@string/app_name" android:debuggable="@bool/build_log">

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