Since Android Jelly Bean doesn't support the logs reading permission (according to this google io 2012 video and this one too ) , i would like to know if it's possible for rooted devices (or non-rooted devices) to be able to bypass this restriction and be able to read the logs.
How do i do that? Do i really need to make the app a system app, or is rooting enough?
EDIT: It turns out that
adb shell pm grant
only works on emulators. Production devices do not allowshell
to grant and revoke optional permissions.You don't need to have root. The only thing you need to enable READ_LOGS to non-system applications is to have Android SDK installed.
Basically, you need to call:
Where
<pkg.name>
is your application's package name. This is possible because READ_LOGS is not only a "system" permission, but also a "development" permission (this term is introduced in JB). Which actually allows users to grant this permission to any application. No root required.More information is available in this google groups thread with comments from Dianne Hackborn.
You can obtain the permission on a rooted device by executing the pm grant command from your app. Probably you will have to restart the app after that for the change to take effect, though:
This code should be called from your onCreate(). Once the permission is granted, no more root powers are required.
P.S: The p.waitFor() blocks on the Superuser app, delaying your app start and potentially cause an ANR.
I've got around this on a rooted device by calling logcat with
su
and reading from stdoutThere is another way to access all logs without the need for root permissions. You can use remote debugging. Take a look at the open source rootless Logcat app.