問題1: 私のアプリケーションを使用してカーネルログを他のファイルにリダイレクトしたい。 正しく実行するには?Runtime.execを使用してdmesgのデータをリダイレクトする方法は?
Runtime.getRuntime().exec("dmesg > /data/kernel_log.txt");
問題2: 私は私のアプリを使用してカーネルログをクリアしたいコードは、以下のようなものです。以下のコードを修正する方法。
Runtime.getRuntime().exec("dmesg -c");
注1: 私の目標は、STARTから最新のカーネル(のdmesg)のすべてのログを取得することです。 dmesgにはバッファサイズの制限があり、バッファのサイズを変更するためにカーネルを再構築したくないので です。
注2:これは非常に関連しています。 android : how to run a shell command from within code
注3:現在、私は、ENGモードのビルドでデバイスを使用しています、私は修正しています、これが根付いていることを意味?
Logcatエラーメッセージ:
11-11 20:18:47.910: E/DmesgGetterService(2885): java.io.IOException: Error running exec(). Command: [dmesg > /data/kernel_log.txt] Working Directory: null Environment: null
...
11-11 20:19:07.920: E/DmesgGetterService(2885): Caused by: java.io.IOException: No such file or directory
...
私はアンドロイドでは一度も働いたことはありませんが、それが "Desktop-Linux"と似ていると思うと、/ procファイルシステムからdmesg-infoを入手できるはずです。 IIRC dmesgは、仮想ファイル/ proc/kmesgを出力するための略語です。 – Jonathan
はい、次のようにカーネルログを取得できます:Runtime.getRuntime()。exec( "dmesg"); – quiel
問題は出力を別のファイルにリダイレクトできないことです。私はFileOutputStreamを使用することができますが、これは行単位でループするので、メモリ使用量が大きくかかる可能性があります。 – quiel