Запись дампа в файл Android - PullRequest
2 голосов
/ 26 января 2012

Мне нужна опция bugreport, которую вы можете использовать в adb, чтобы перейти к файлу на sd в моем приложении.Я нашел Android;использование exec ("bugreport") , которое объясняет, что вы не можете запустить bugreport в обычной оболочке и что вам нужно запускать dumpstate, dumpsys и logcat отдельно, чтобы получить тот же результат.Это нормально, и я это понимаю, но я не могу получить dumpstate или dumpsys для записи в файл.Приведенное ниже прекрасно работает для записи logcat с использованием logcat -d -f, но не работает для двух других.Я пробовал dumpstate -f, dumpstate -d -f и dumpstate>, чтобы заставить его работать, но все равно ничего не записывает в файл.Есть что-то, чего мне не хватает, чтобы заставить эту работу?
Здесь я создаю файл на sd

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

, а здесь я записываю файл в папку

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

1 Ответ

8 голосов
/ 28 января 2012

Я получил это работает. Я нашел Запуск команд оболочки через Java-код на Android? и изменил его так, чтобы он работал так, как мне было нужно.

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

Если кому-то это нужно, вот как я все провожу вместе. К приложению должен быть прикреплен отчет об ошибке, прочитав Выполнение команд оболочки через код Java на Android? , я увидел, что нет способа запустить отчет об ошибках, только три компонента: , dumpsys и log. Я создаю каждый отчет отдельно, а затем объединяю их все в один файл, чтобы прикрепить к электронному письму.

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