10

私はそのような問題を抱えています.logcatからプログラムでデータを取得しようとしています. パーミッションもマニフェスト ファイルに追加されました。

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

コード:

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Process process = Runtime.getRuntime().exec("logcat ActivityManager:I *:S");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    reactOnString(line);
                }
            } catch (IOException e) {
            }
        }
    }).start();

ただし、他のアプリがいつ起動されるかはわかりません。以下のような文字列を待っていますが、表示されません。

2260-2566/system_process                 I/ActivityManager: Start proc com.android.email for activity com.android.email/.activity.MessageCompose: pid=6460 uid=10011 gids={50011, 3003, 1015, 1023, 1028}

PS このコードはサービスで実行されます。

4

2 に答える 2

9

悪い知らせがあります: JB の時点で、READ_LOGS は以前のように機能しなくなりました:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/6U4A5irWang

(Android 開発者 Dianne Hackborn の投稿までスクロールしてください) とこのビデオ:

Google I/O 2012 - ゲーム デベロッパーが知っておくべき 10 のこと

(22:47) 公式情報源。

ただし、彼はまだ文書化されておらず ( READ_LOGSパーミッションはこれを報告していません)、混乱の原因となっています。現在は自分のログにのみアクセスできます。幸いなことに、ログのアクセス許可を要求する必要はもうありません(ジェリー Bean をターゲットにしている場合は、それだけです...)。

悪意のあるアプリがユーザーをスパイし、おそらく機密情報を取得するのを防ぐために、Android 開発チームがとった妥協だと思います (すべてのアプリ開発者が、リリース前に Log.d ステートメントをクリーンアップするとは限りません)。

お役に立てれば

于 2013-05-28T15:29:21.493 に答える
3

Android Jelly Bean から、デバイスがルート化されていてスーパーユーザーとしてログを読み取らない限り、アプリケーションは他のアプリケーションからログ エントリを読み取ることができません。

基本的に...これは予想される動作です。

Android のドキュメントに公式の声明は見つかりませんでした (誰かがこの回答を編集できます) 。 -can-i-access-android-log-files-on-my-nexus-7-without-root-access

于 2013-05-28T15:29:10.613 に答える