0

私はこのコードを使用してlogcat出力をsdcardに保存しています:-

    public String ReadFromCMD(String[] strCmdArgs)
    {

     ProcessBuilder cmd;
     String result="";
     try
     {
          cmd = new ProcessBuilder(strCmdArgs);
          Process process = cmd.start();
          InputStream in = process.getInputStream();

          BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
            int read;
            char[] buffer = new char[4096];
            StringBuffer output = new StringBuffer();

            process.waitFor();

            while ((read = reader.read(buffer)) > 0) 
            {
                output.append(buffer, 0, read);
            }
            reader.close();
            result = output.toString();
            in.close();

     } catch(Exception ex){ ex.printStackTrace(); }

     return result;
}

ここで、ログをファイルに保存できます。

このコマンドで。

String[] args_Logs_Save = "/system/bin/logcat -v time -d -b radio -b events -b main -b system".split(" ");
ReadFromCMD(args_Logs_Save);

ここでの質問は次のとおりです:-ログの保存は私のアプリケーションパッケージのみであり、「I/WifiHW、W/ActivityManager、D/hwcomposer、D/wpa_supplicant」などのタグを含む完全な logcat 出力ではありません...

「/system/bin/logcat -v time -d -b radio -b events -b main -b system」を adb シェルから手動で実行すると、正常に実行され、すべての出力が得られます

しかし、コードの上から実行すると、パッケージのみの出力しか得られません。

では、上記のコードからすべての logcat を取得するにはどうすればよいでしょうか?

ノート:

Android 4.1 & 4.2 を使用しています

参照リンク : Link1Link2Link3Link4

知っていれば、助けてください、ありがとう。

4

1 に答える 1

0

Android 4.1 より前のすべてのアプリは、READ_LOG_PERMISSION他のプログラムからログにアクセスできましたが、これは Android Jelly Bean で変更されました。セキュリティ上の理由から、Android 4.1 以降では、独自のプログラムからのみログを読み取ることができます。残念ながら、この変更は Google によって文書化されていません (このディスカッションも参照してください) 。

私の知る限り、唯一の回避策は、デバイスをルート化してから、プログラムをルートとして実行するか、このコマンドを実行することです(この投稿chmod 04755 /system/bin/logcatも参照してください)

于 2013-04-06T18:16:27.093 に答える