2

我需要您可以在 adb 中使用的错误报告选项来转到我的应用程序中 sd 上的文件。我找到了安卓;使用 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();
    }
4

1 回答 1

8

我让它工作了。我发现在 Android 上通过 java 代码运行 Shell 命令?并修改它以像我需要的那样工作。

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

如果有人需要它,这就是我将所有东西一起运行的方式。该应用程序需要附加一个错误报告,从通过Android 上的 Java 代码读取运行 Shell 命令?,我看到没有办法运行错误报告,只有三个组件: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();    
        }
于 2012-01-28T03:12:48.347 回答