我需要在adb中使用bugreport选项,以转到我的应用程序中的SD上的文件。我找到了 android;使用exc(“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();
    }
.

有帮助吗?

解决方案

我工作了。我找到了运行shell命令虽然在android上的Java代码?,我看到没有一种方法来运行一个错误报告,只需三个组件:dumpstate,diveSys和日志。我分别生成每个报告,然后将它们全部组合成一个文件以附加到电子邮件。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top