1

そのため、プロファイリングセッション中に例外をログに記録できる必要があるプロファイラーを作成しています。私の計画は、logcatを使用してSDカードまたは内部ストレージ上のファイルにダンプし、プロファイリングセッションが完了したら、ファイルを圧縮してサーバーに送信することでした。マニフェストにを追加しましたandroid.permission.READ_LOGS。コードは次のとおりです。

public void startLoggingExceptions() {
    String filename = null;
    String directory = null;
    String fullPath = null;
    String externalStorageState = null;

    // The directory will depend on if we have external storage available to us or not
    try {
        filename = String.valueOf(System.currentTimeMillis()) + ".log";
        externalStorageState = Environment.getExternalStorageState();

        if (externalStorageState.equals(Environment.MEDIA_MOUNTED)) {
            if(android.os.Build.VERSION.SDK_INT <= 7) {
                directory = Environment.getExternalStorageDirectory().getAbsolutePath();
            } else {
                directory = ProfilerService.this.getExternalFilesDir(null).getAbsolutePath();
            }
        } else {
            directory = ProfilerService.this.getFilesDir().getAbsolutePath();
        }

        fullPath = directory + File.separator + filename;

        Log.w("ProfilerService", fullPath);
        Log.w("ProfilerService", "logcat -f " + fullPath + " *:E");

        exceptionLogger = Runtime.getRuntime().exec("logcat -f " + fullPath + " *:E");
    } catch (Exception e) {
        Log.e("ProfilerService", e.getMessage());
    }
}

exceptionLoggerはProcessexceptionLogger.destroy()オブジェクトであり、プロファイリングセッションが完了したときに呼び出します。

私が見ている動作は、ファイルが指定した場所に作成されているが、ファイルにログ出力がないことです。エミュレーターで開発ツールアプリケーションを使用して、未処理の例外を強制的にログに表示していますが、logcat出力ファイルは空のままです。何かご意見は?

編集:したがって、adbシェルに移動し、次にSUをアプリケーションに割り当てられたユーザーアカウントに移動すると、logcatを実行すると次のように表示されます。

Unable to open log device '/dev/log/main': Permission denied

アプリにマニフェスト権限を追加すると、これが可能になると思っていましたか?

4

2 に答える 2

14

この話の教訓は次のとおりです。マニフェスト ファイルの許可が実際に READ_LOG だけでなく READ_LOGS になっていることを再確認してください。

于 2011-06-02T19:48:04.873 に答える
2

誰かが私と同じ問題に遭遇した場合に備えて: 単体テストから logcat を読み込もうとすると、テスト プロジェクトではなく、テスト対象のアプリケーションにアクセス許可を追加する必要があります。テスト プロジェクトのみにアクセス許可を追加しても、引き続きアクセス許可エラーが発生します。

于 2012-12-18T06:53:42.877 に答える