Enviar salida Logcat de una aplicación a una dirección de correo electrónico

Ahora estamos probando nuestra aplicación con algunos amigos. A veces hay algunos errores que no lanzan una excepción. Así que no sé cuál es el problema. Así que pensé que sería una buena idea para implementar un elemento de menú que permite enviar la salida logcat a una dirección de correo electrónico, para que podamos examinar el registro.

Desafortunadamente no encontré una pista en Internet como extraer el logcat de un teléfono. Cómo enviar un correo electrónico no debe ser el problema.

Mira android-log-collector , ya que hace lo que está tratando de hacer.

No es posible recopilar datos de LogCat arbitrarios a partir de Android 4.1. Nunca hubo una manera documentada y soportada de hacer eso, y la forma indocumentada / sin apoyo fue bloqueada en Jelly Bean . Para sus propios accidentes, es mejor servir usando una biblioteca de registro de fallos, como ACRA .

También me gustaría ver en Flurry ( flurry.com ) que no sólo le da analítica general, pero le permite registrar información arbitraria y también registra excepciones no captadas para usted. Lo configuré en literalmente 5 minutos, pero una cosa a tener en cuenta es que no es en tiempo real como una alerta de correo electrónico. Tendrás que esperar unas cuantas horas para que te identifiques en tu aplicación para que aparezcan en el panel de control. También podría ser excesivo si tienes una aplicación realmente ligera, pero no he notado ninguna pérdida de rendimiento en mi aplicación como resultado del uso del servicio.

He encontrado el LogCollector muy útil de hecho (la punta de CommonsWare):

Y no olvide establecer en su propia aplicación:

<uses-permission android:name="android.permission.READ_LOGS" /> 

Definitivamente recomiendo mirar también este proyecto aquí

Esta solución no envía un correo electrónico, pero lo envía a un servidor a través de UDP.

https://github.com/Chemik/logcatudp

El código fuente está disponible. Se puede incrustar fácilmente en nuestra propia aplicación. No he intentado hacerlo.

En su archivo de manifiesto, dé los siguientes permisos:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

En su primera actividad / lanzador, justo después de la

 super.onCreate(savedInstanceState); 

Escriba las líneas siguientes: Escribirá el logcat de su aplicación en el almacenamiento externo de su dispositivo

  if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_PERMISSION_CODE); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_PERMISSION_CODE); } if ( isExternalStorageWritable() ) { File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyAppLog" ); File logDirectory = new File( appDirectory + "/log" ); File logFile = new File( logDirectory, "logcat" + ".txt" ); // create app folder if ( !appDirectory.exists() ) { appDirectory.mkdir(); } // create log folder if ( !logDirectory.exists() ) { logDirectory.mkdir(); } // clear the previous logcat and then write the new one to the file if ( logFile.exists()){ logFile.delete(); } try { Process process = Runtime.getRuntime().exec("logcat -c"); process = Runtime.getRuntime().exec("logcat -f " + logFile); } catch ( IOException e ) { e.printStackTrace(); } } else if ( isExternalStorageReadable() ) { // only readable } else { // not accessible } 

Para enviar el logcat a la dirección de correo electrónico deseada: use debajo del método

 public void sendLogcatMail(){ if ( isExternalStorageWritable() ) { File appDirectory = new File(Environment.getExternalStorageDirectory() + "/MyAppLog"); File logDirectory = new File(appDirectory + "/log"); File logFile = new File(logDirectory, "logcat" + ".txt"); if (logFile.exists()) { Intent emailIntent = new Intent(Intent.ACTION_SEND); emailIntent.setType("vnd.android.cursor.dir/email"); String to[] = {"[email protected]"}; emailIntent.putExtra(Intent.EXTRA_EMAIL, to); emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(String.valueOf(logFile.toURI()))); emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Log files"); emailIntent.putExtra(Intent.EXTRA_TEXT, "Send some message along"); startActivity(Intent.createChooser(emailIntent, "Send email...")); } } } 

Método para comprobar si se dan o no los permisos de escritura a almacenamiento externo:

/ * Comprueba si hay almacenamiento externo disponible para lectura y escritura * /

 public static boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if ( Environment.MEDIA_MOUNTED.equals( state ) ) { return true; } return false; } 

Gracias a usted 2 pero al navegar por el foro de Android-log-collector he encontrado una solución que es aún más fácil de manejar:

Allí puede almacenar un archivo php en algún lugar de su servidor (o si no desea utilizar su propio servidor, también tienen un script en su servidor). En este archivo php puede definir qué se debe hacer cuando el mensaje posterior llega al servidor. Acabo de definded un código muy simple que envía los datos a mi dirección de correo.

Esto sólo funciona si se lanzó una excepción no captada. Pero uno podría extender el manejador de excepción no detectado por defecto, de modo que también es posible no sólo obtener el stacktrace sino también el logcat.

  • Los datos de Logcat no se muestran en la ficha Registro de DDMS Eclipse
  • Procesos del teléfono Flooding LogCat Salida - ¿Cómo eliminar esos mensajes?
  • ¿Cómo supervisar constantemente el archivo LogCat?
  • Navegación InteLiJ IDEA logcat
  • Cómo ocultar, eliminar, filtrar registros en el logcat de Eclipse para Android
  • Cómo filtrar el logcat de shell de adb de Android usando etiquetas de mutiple al mismo tiempo?
  • UnsatisfiedLinkError: n_Mat mientras se usa opencv2.4.3 con android 4.0
  • Advertencia / errores del registro Logcat
  • ¿Cómo puedo arreglar lo que está causando esto inundar mi logcat: I / System.out: (HTTPLog) -Static: isSBSettingEnabled false
  • Android java.lang.NullPointerException: println necesita un mensaje
  • E / art: Error al enviar la respuesta al depurador: Canal roto, pero la aplicación todavía se ejecuta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.