2

アプリのsd上のファイルに移動するためにadbで使用できるバグレポートオプションが必要です。Androidを見つけました。exec( "bugreport")を使用すると、通常のシェルではbugreportを実行できず、同じ結果を得るには、dumpstate、dumpsys、およびlogcatを個別に実行する必要があることを説明します。それは問題なく、私はそれを理解していますが、dumpstateまたはdumpsysにファイルに書き込むことはできません。以下は、logcat -d -fを使用してlogcatを書き込むために正常に機能しますが、他の2つでは機能しません。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コードでシェルコマンドを実行しているのを見つけましたか?必要に応じて動作するように変更しました。

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コードを介してRunningShellコマンドを読み取ることから、アプリにバグレポートを添付する必要がありますか?、バグレポートを実行する方法はなく、dumpstate、dumpsys、logの3つのコンポーネントだけであることがわかりました。私は各レポートを個別に生成し、それらをすべて1つのファイルにまとめて電子メールに添付しています。

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 に答える