and*_*per 22 logging android root android-4.2-jelly-bean
由于Android Jelly Bean不支持日志读取权限(根据此谷歌io 2012视频和此视频),我想知道root设备(或非root设备)是否可以绕过这个限制并能够读取日志.
我怎么做?我真的需要将应用程序变成系统应用程序,还是足够生根?
ge0*_*0rg 27
您可以通过从应用程序执行pm grant命令来获取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!");
Run Code Online (Sandbox Code Playgroud)
应该从onCreate()调用此代码.授予权限后,不再需要root权限.
PS:超级用户应用程序上的p.waitFor()阻止,延迟您的应用程序启动并可能导致ANR.
ina*_*ruk 22
编辑:事实证明,adb shell pm grant只适用于模拟器.生产设备不允许shell授予和撤消可选权限.
你不需要root.将READ_LOGS启用到非系统应用程序所需的唯一方法是安装Android SDK.
基本上,你需要打电话:
adb shell pm grant <pkg.name> android.permission.READ_LOGS
Run Code Online (Sandbox Code Playgroud)
<pkg.name>您的应用程序的包名称在哪里.这是可能的,因为READ_LOGS不仅是"系统"权限,而且是"开发"权限(这个术语在JB中引入).这实际上允许用户将此权限授予任何应用程序.不需要root.
有关更多信息,请参阅此谷歌团队主题,其中包含Dianne Hackborn的评论.
| 归档时间: |
|
| 查看次数: |
23471 次 |
| 最近记录: |