まとめ
Android 4.1 (Jelly Bean) 以降で logcat表示アプリ を機能させるためには、adb shell (pm) を使って、「android.permission.READ_LOGS
」権限を有効化する必要あり。(root化は不要)
adb shell pm grant <PACKAGE> android.permission.READ_LOGS
たとえば、aLogcat を Jelly Bean 以降でも機能させたい場合には、adb shell で下記のコマンドを実行する。
adb shell pm grant org.jtb.alogcat android.permission.READ_LOGS
背景
「android.permission.READ_LOGS
」権限の protectionLevel が、Jelly Bean から変更になった。
- Android 4.0.3 (Ice Cream Sandwich MR1) 以前の
READ_LOGS
android:protectionLevel="dangerous"
- Android 4.1 (Jelly Bean) 以降の
READ_LOGS
android:protectionLevel="signature|system|development"
その結果、通常のアプリでは、AndroidManifest.xml
で「android.permission.READ_LOGS
」権限を要求するだけでは、権限が有効にならなくなった。
→AndroidManifest.xml
での権限要求に加えて、パッケージマネージャ (pm) での権限有効化 (grant
) が必要となった。
つまり、「android.permission.READ_LOGS
」権限を有効化されていないアプリは、Android 4.1 (Jelly Bean) 以降では、他アプリの出力したログを取得 (表示) できない。(できなくなった)
参考
- Issue 34792 - android - Android Jelly Bean / 4.1: android.permission.READ_LOGS no longer works
- Issue 34785 - android - Update android:protectionLevel documentation
- android - READ_LOGS permission on Jelly Bean (api 16) - Stack Overflow
- logcat - Read logs from all apps on android from within an app for android 4.2+ - Stack Overflow