Pergunta

Eu preciso do bugreport opção que você pode usar no adb para ir para um arquivo no sd no meu app.Eu encontrei O Android;usando o exec("bugreport") que explica que você não pode executar bugreport na rede regular de shell e o que você precisa para executar dumpstate, dumpsys, e logcat separadamente para obter o mesmo resultado.O que é bom e eu entendo isso, mas eu não posso chegar dumpstate ou dumpsys para gravar o arquivo.Abaixo funciona bem para escrever o logcat usando logcat -d -f, mas não funciona para os outros dois.Eu tentei dumpstate -f , dumpstate -d -f e dumpstate > para o pôr a funcionar, mas ainda não escrevi nada para o arquivo.Existe algo que eu estou faltando para fazer esse trabalho?
Este é o lugar onde eu estou criando o arquivo no sd

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

e aqui é onde eu estou escrevendo o arquivo para o local

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

Solução

Eu tenho que trabalhar.Eu encontrei A execução de comandos de Shell que o código java no Android? e modificado para funcionar como eu precisava que ele.

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

Se alguém precisa de ti, aqui é a maneira que eu estou correndo tudo junto.O aplicativo precisa de ter um relatório de bug ligado a ele, a partir de leitura A execução de comandos de Shell que o código java no Android? , Eu vi que não existe uma maneira de executar um relatório de bug, apenas os três componenets:dumpstate, dumpsys, e de log.Estou gerando cada relatório em separado e, em seguida, combiná-los todos em um único arquivo para anexar a um e-mail.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top