由于Android果冻豆不支持日志读取权限 (根据这个谷歌IO 2012视频和这一个了 ),我想知道这是否是可能的解锁装置(或无根设备)能够绕过这个限制并能够读取日志。
我怎么做? 我真的需要使应用程序的系统应用,或足够生根?
由于Android果冻豆不支持日志读取权限 (根据这个谷歌IO 2012视频和这一个了 ),我想知道这是否是可能的解锁装置(或无根设备)能够绕过这个限制并能够读取日志。
我怎么做? 我真的需要使应用程序的系统应用,或足够生根?
您可以从您的应用程序执行时准许命令获取root权限的设备上的权限。 也许你将不得不重新启动应用程序后,对于更改生效,但:
String pname = getPackageName();
String[] CMDLINE_GRANTPERMS = { "su", "-c", null };
if (getPackageManager().checkPermission(android.Manifest.permission.READ_LOGS, pname) != 0) {
Log.d(TAG, "we do not have the READ_LOGS permission!");
if (android.os.Build.VERSION.SDK_INT >= 16) {
Log.d(TAG, "Working around JellyBeans 'feature'...");
try {
// format the commandline parameter
CMDLINE_GRANTPERMS[2] = String.format("pm grant %s android.permission.READ_LOGS", pname);
java.lang.Process p = Runtime.getRuntime().exec(CMDLINE_GRANTPERMS);
int res = p.waitFor();
Log.d(TAG, "exec returned: " + res);
if (res != 0)
throw new Exception("failed to become root");
} catch (Exception e) {
Log.d(TAG, "exec(): " + e);
Toast.makeText(context, "Failed to obtain READ_LOGS permission", Toast.LENGTH_LONG).show();
}
}
} else
Log.d(TAG, "we have the READ_LOGS permission already!");
此代码应该叫您的onCreate()。 一旦授予权限,不需要更多的root权限。
PS:本p.waitFor()的超级用户的应用程序块,延缓你的应用程序启动并有可能导致ANR。
编辑 :原来, adb shell pm grant
只能在模拟器。 生产设备不允许shell
授予和撤销可选权限。
你并不需要有根。 您需要启用READ_LOGS到非系统应用程序的唯一的事情就是安装Android SDK中。
基本上,你需要调用:
adb shell pm grant <pkg.name> android.permission.READ_LOGS
其中<pkg.name>
是应用程序的包名。 这是可能的,因为READ_LOGS不仅是一个“系统”的权限,又是“发展”的权限(这个词在JB介绍)。 这实际上允许用户授予此权限的任何应用程序。 无需根。
更多信息,这是可用的谷歌组线程与戴安娜Hackborn的意见。
我已经通过调用logcat的周围有这样一个根深蒂固的设备上su
和标准输出读
... .getRuntime().exec("su -c logcat -d");
还有另一种方式来访问所有日志,而不需要root权限。 您可以使用远程调试。 看看开源无根logcat的应用程序 。