1

Android システム レベルのログ ファイルを読みたいので、次のコードを使用します。

        Process mLogcatProc = null;
    BufferedReader reader = null;
    try {
        mLogcatProc = Runtime.getRuntime().exec(
                new String[] { "logcat", "-d",
                        "AndroidRuntime:E [Your Log Tag Here]:V *:S" });

        reader = new BufferedReader(new InputStreamReader(mLogcatProc
                .getInputStream()));

        String line;
        final StringBuilder log = new StringBuilder();
        String separator = System.getProperty("line.separator");

        while ((line = reader.readLine()) != null) {
            log.append(line);
            log.append(separator);
        }

    }

    catch (IOException e) {}
    finally {
        if (reader != null)
            try {
                reader.close();
            } catch (IOException e) {}

    }

AndroidManifest.xml でも使用しました。でも一行も読めない。StringBuilder ログが空です。そして、メソッド mLogcatProc.waitFor は 0 を返します。

では、どうすればログを読むことができますか?

4

3 に答える 3

2

通常の (非 suid) Android アプリケーションからこれを行うことはできません。

これは、Android で logcat ファイルを読み取るために、プロセスを root として (または adb から) 実行する必要があるためです。[root 化された] 電話にターミナル エミュレータがインストールされている場合は、logcat を実行してみてください。root に su しない限り、ログ バッファへのアクセスは拒否されます。

StringBuffer が空になる理由は、プロセスがエラー メッセージを stderr に出力するためです (そして、BufferedReader を介して stdin を読み取っています)。

于 2010-12-29T07:07:55.817 に答える
2

AndroidManifest.xml に正しい権限を追加すると、元の投稿のコードが機能します

 <uses-permission android:name="android.permission.READ_LOGS" />

PS: もちろん、コード内の「[Your Log Tag Here]」を実際の TAG に置き換える必要があります ;-)

于 2011-01-21T11:38:19.380 に答える
1

LogCollector のソースを見てください。問題の解決策があるはずです。http://code.google.com/p/android-log-collector/

于 2010-12-29T07:32:13.277 に答える