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.
- Leer logcat de forma programática para una aplicación
- Huawei, logcat no mostrar el registro de mi aplicación?
- Mostrando más cadena en Logcat
- Cómo ver una matriz en logcat para android
- ¿Cómo ejecutar logcat en varios dispositivos?
- Grep el logcat de adb y escribe la salida en un archivo de texto
- Adb logcat: Aumentar la longitud máxima del mensaje
- Dispositivo Android LogCat desconectado
- Monitorización de startActivity en logcat
- ¿Podemos desactivar "chatty" en logcat?
- Cómo mostrar sólo mensaje de registro (ocultar hora, pid etc.) en Android Studio
- Cómo mostrar mensajes largos en logcat
- Cómo se guardan los mensajes de logcat
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.
- Android 5.0 lollipop app install muestra código de error desconocido durante la instalación de la aplicación: "-505"
- Cómo cargar imágenes de una tarjeta SD con la biblioteca de Picasso