usar studio log hacer como java android eclipse logcat android-sdcard

java - studio - Guardar Logcat en un archivo de texto en un dispositivo Android



logcat apk (7)

Agregue el permiso manifiesto:

uses-permission android:name="android.permission.READ_LOGS" private static final String COMMAND = "logcat -d -v time"; public static void fetch(OutputStream out, boolean close) throws IOException { byte[] log = new byte[1024 * 2]; InputStream in = null; try { Process proc = Runtime.getRuntime().exec(COMMAND); in = proc.getInputStream(); int read = in.read(log); while (-1 != read) { out.write(log, 0, read); read = in.read(log); } } finally { if (null != in) { try { in.close(); } catch (IOException e) { // ignore } } if (null != out) { try { out.flush(); if (close) out.close(); } catch (IOException e) { // ignore } } } } public static void fetch(File file) throws IOException { FileOutputStream fos = new FileOutputStream(file); fetch(fos, true); }

Encontré algunos fallos al ejecutar la aplicación en un dispositivo Android, que no se muestra en el emulador. Así que necesito guardar el Logcat en un archivo de texto en la memoria de mi dispositivo o en la tarjeta SD. ¿Podría por favor sugerirme un buen método para hacer esto?


Aparentemente, android.permission.READ_LOGS solo se otorga a las aplicaciones del sistema en las últimas versiones de Android.


Como no puedo comentar todavía, publicaré esto como una respuesta

Hice lo que dijo @HeisenBerg, funcionó bien para mí, pero como desde la versión 6.0 de Android tenemos que pedir permiso en Run Time, tuve que agregar lo siguiente:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } }

Y llama

process = Runtime.getRuntime().exec("logcat -f " + logFile);

Sólo en la devolución de llamada onRequestPermissionsResult


Si solo necesita guardar el logcat (sin su codificación) puede usar las aplicaciones aLogrec o aLogcat de Google Play.

Google Play Store: aLogcat y aLogrec


Use la opción -f con logcat en su clase:

Runtime.getRuntime().exec("logcat -f" + " /sdcard/Logcat.txt");

Esto volcará los registros al dispositivo almacenado en el archivo.

Tenga en cuenta que la ruta "/ sdcard /" puede no estar disponible en todos los dispositivos. Debe usar las API estándar para acceder al almacenamiento externo .


use una clase de aplicación al comienzo de su aplicación. Eso permite un correcto manejo de archivos y registros. Aquí hay un ejemplo. Ese fragmento de código agrega una nueva carpeta llamada "MyPersonalAppFolder" con otra carpeta llamada "log" en el almacenamiento externo público. después de eso, la salida de logcat se borra y la nueva salida de logcat se escribe en un nuevo archivo llamado logcatXXX.txt, donde XXX es el tiempo de milisegundos en este momento.

public class MyPersonalApp extends Application { /** * Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created. */ public void onCreate() { super.onCreate(); if ( isExternalStorageWritable() ) { File appDirectory = new File( Environment.getExternalStorageDirectory() + "/MyPersonalAppFolder" ); File logDirectory = new File( appDirectory + "/log" ); File logFile = new File( logDirectory, "logcat" + System.currentTimeMillis() + ".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 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 } } /* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if ( Environment.MEDIA_MOUNTED.equals( state ) ) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if ( Environment.MEDIA_MOUNTED.equals( state ) || Environment.MEDIA_MOUNTED_READ_ONLY.equals( state ) ) { return true; } return false; } }

necesita los permisos correctos en su archivo .manifest:

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

Ahora ejecute su aplicación y vaya a "/ su almacenamiento externo / MyPersonalAppFolder / logs /"

Encontrarás el archivo de registro allí.

fuente: http://www.journal.deviantdev.com/android-log-logcat-to-file-while-runtime/

Editar:

Si desea guardar el registro de solo algunas actividades particulares ..

reemplazar:

process = Runtime.getRuntime().exec("logcat -f " + logFile);

con:

process = Runtime.getRuntime().exec( "logcat -f " + logFile + " *:S MyActivity:D MyActivity2:D");


adb shell logcat -t 500 > D:/logcat_output.txt

Vaya a su terminal / indicador de comando y navegue a la carpeta con adb en ella, si aún no está agregado a sus variables de entorno y pegue este comando.

t es la recta numérica que necesitas ver

D: / logcat_output.txt es donde se almacenará su logcat.