Pregunta

Necesito la opción BogReport que puede usar en ADB para ir a un archivo en el SD en mi aplicación.Encontré Android;Uso de EXEC ("bogreport") que explica que no puede ejecutar bogreport en la carcasa regular y que debe ejecutar DumpState, Dumpsys y Logcat por separado para obtener el mismo resultado.Eso está bien y entiendo eso, pero no puedo conseguir DumpState o Dumpsys para escribir al archivo.Los a continuación funcionan bien para escribir el logcat usando Logcat -D -F, pero no funciona para los otros dos.He intentado DumpState -f, DumpState -D -F y DumpState> Para obtener trabajo, pero aún no le escribe nada al archivo.¿Hay algo que me esté perdiendo para hacer este trabajo? Aquí es donde estoy creando el archivo en el SD

File folder = new File(Environment.getExternalStorageDirectory()+"/IssueReport/");
    if (folder.isDirectory() == false) {
        folder.mkdir();
    }
    log = new File(Environment.getExternalStorageDirectory()+"/IssueReport/log.txt");

y aquí es donde estoy escribiendo el archivo a la ubicación

private void submit() {
    try {
       log.createNewFile(); 
       String cmd = "dumpstate "+log.getAbsolutePath();
       Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
    e.printStackTrace();
    }

¿Fue útil?

Solución

Lo tengo trabajando.Encontré ¿Ejecución de comandos de shell a través de un código Java en Android? Y lo modificó para trabajar como lo necesitaba.

private void submit() {
    try {
         String[] commands = {"dumpstate > /sdcard/log1.txt"};
         Process p = Runtime.getRuntime().exec("/system/bin/sh -");
         DataOutputStream os = new DataOutputStream(p.getOutputStream());
            for (String tmpCmd : commands) {
                os.writeBytes(tmpCmd+"\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

Si alguien lo necesita, aquí está la forma en que estoy ejecutando todo juntos.La aplicación debe tener un informe de errores adjunto a él, desde la lectura ¿Ejecutar comandos de shell a través de un código Java en Android? Vi que no existe una manera de ejecutar un informe de errores, solo los tres componentes: Dumpstate, Dumpsys y Log.Estoy generando cada informe por separado y luego combinándolos a todos en un archivo para adjuntar a un correo electrónico.

private void submit() {
    try {
         String[] commands = {"dumpstate > /sdcard/IssueReport/dumpstate.txt", 
                              "dumpsys > /sdcard/IssueReport/dumpsys.txt",
                              "logcat -d > /sdcard/IssueReport/log.txt",
                              "cat /sdcard/IssueReport/dumpstate.txt /sdcard/IssueReport/dumpsys.txt /sdcard/IssueReport/log.txt > /sdcard/IssueReport/bugreport.rtf" };
         Process p = Runtime.getRuntime().exec("/system/bin/sh -");
         DataOutputStream os = new DataOutputStream(p.getOutputStream());
            for (String tmpCmd : commands) {
                    os.writeBytes(tmpCmd+"\n");
            }
        } catch (IOException e) {
            e.printStackTrace();    
        }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top