escrito dumpstate para arquivo android
-
14-11-2019 - |
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();
}
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();
}