6

Jelly Beanは、他のアプリのログを読み取る機能を削除しました(このI / Oトークによると)。これは、賢明なセキュリティの向上です。ただし、ActivityManagerアプリを機能させるには、-logsを読み取る必要があります(現在起動しているアプリを確認するため)。これを行うために、私は使用していました

private static final String clearLogcat = "logcat -c";
private static final String logcatCommand = "logcat ActivityManager:I *:S";
//...

Jelly Beanで自分のアプリケーションのログしか読み取れないため、これは機能しなくなりました。別のアプリがいつ起動しているかを確認するための代替ソリューションはありますか(ルートは別として)?他のアプリケーションのログを読み取れない理由は理解していますが(ログの読み取りを妨げられて私のものではなく、個人情報がログに記録されないようにするのは他の開発者の責任である必要があります)、私はActivityManagerフレームワーククラスであるがそのポリシーに含まれている理由がわかりません...

ありがとう、
ニック

4

2 に答える 2

7

この問題については、ここで広範な議論が行われています。残念ながら、これは「予期される動作」であり、修正される予定はありません。(JB 以上のアプリケーション内からログを読み取るための) 現在の唯一の解決策は、adb を介して手動でアプリにアクセス許可を付与することです。

adb shell pm grant <pkg> android.permission.READ_LOGS

このように許可された許可:

  • 再起動しても生き残る
  • アプリケーションの更新に耐えます (つまり、「adb install -r」)
  • アプリケーションがアンインストールされてから再度インストールされた場合、存続しません

これが通常のユーザーに期待できることではないことは明らかです。GUI ソリューション (ユーザーがSettingsデバイスのメニューからこの権限を付与できる) が Android チームによって約束されていますが、残念ながら、「修正」が実装される前に機能が削除されました。

于 2012-08-09T13:31:20.750 に答える
0

まずActivityManager、アプリケーションではありません... Android アプリケーション フレームワークの一部を構成するクラスです。

第 2 に、Android チームが意図的にこれが機能しないようにしているのであれば、セキュリティの抜け穴があるとは思えません。実際には、サードパーティのアプリケーションが正しく動作するために logcat ログに依存する必要はありません。これらのログを読む必要がある理由について詳細を教えていただければ、より良い解決策をご案内できるかもしれません。

于 2012-07-07T00:16:16.187 に答える