我需要BugReport选项,您可以在ADB中使用它来转到我的应用程序中SD上的文件。我发现Android; using exec("bugreport")这解释了不能在常规shell中运行bugreport,需要分别运行dumpstate、dumpsys和logcat才能得到相同的结果。这很好,我理解,但我不能让dumpstate或dumpsys写入文件。下面的代码可以很好地使用logcat-d-f编写logcat,但不能用于其他两个。我尝试过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();
    }

最佳答案

我成功了。我找到了Running Shell commands though java code on 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();
        }

如果有人需要的话,这就是我把一切都安排在一起的方式。应用程序需要附加一个bug报告,从阅读Running Shell commands though java code on Android?中,我发现没有办法运行bug报告,只有三个组件:dumpstate、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();
        }

10-08 18:37