当前位置: 首页 > 面试题库 >

对Jelly Bean的READ_LOGS权限(API 16)

柴飞扬
2023-03-14
问题内容

由于Android Jelly Bean不支持日志读取权限(根据此google io 2012视频以及该视频),因此我想知道是否有root的设备(或非root的设备)能够绕过此权限限制,并能够读取日志。

我怎么做?我是否真的需要使该应用程序成为系统应用程序,或者是否足够扎根?


问题答案:

您可以通过在应用程序中执行pm grant命令来获得对已植根设备的许可。不过,为了使更改生效,您可能必须在此之后重新启动应用程序:

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:Superuser应用程序上的p.waitFor()会阻塞,从而延迟了应用程序的启动并可能导致ANR。



 类似资料:
  • 我再一次需要你的帮助堆叠天花! 我一直在开发SDK,现在需要验证用户是否授予了位置或文件写入等权限。 验证是可以的,但是我想如果需要的话,我应该请求许可。问题是,我绝对不能访问任何活动。我可以使用appContext来检查权限,但是我不能像这样监听onRequest estPermissionsResult。 有没有一种聪明的方法可以向我这边请求许可,或者我应该让使用我的SDK的开发人员及时请求许

  • 接口管理的逻辑较为复杂,操作频率高,层层审批将严重拖慢生产效率,因此传统的金字塔管理模式并不适用。 YApi 将扁平化管理模式的思想引入到产品的权限管理中,超级管理员 拥有最高的权限,并将权限分配给若干 组长,超级管理员 只需管理组长 即可,实际上管理YAPI各大分组与项目的是“组长”。组长对分组或项目负责,一般由BU负责人/项目负责人担任。 认识组长 组长分为 分组组长 与 项目组长,他们的关系

  • 您可以定义 M600 上各种应用程式允许使用的信息。 编辑权限设定 导航至 Settings(设定)应用程式,找到并轻触 Apps(应用程式)。 轻触System Apps(系统应用程式)。 滚动列表,找到并轻触您想编辑其权限内容的应用程式或服务。 轻触Permissions(权限)。 轻触不同权限,在开启权限(开关为蓝色)和关闭权限(开关为灰色)之间来回切换。

  • macOS 与 Linux 都属于 Unix 类型的操作系统,所以它们的文件与目录的权限的概念是一样的。 三个动作 系统上的一个用户,对某个文件或目录能做的有三个动作:读取,写入,执行。这三个动作也可以看成是三个权限,用户可以读取文件里的内容,我们就说他对这个文件拥有读取的权限。如果用户可以在某个目录的下面创建新的文件,我们就可以说这个用户对于这个目录来说拥有写入的权限。 这三个权限用字母表示:

  • 权限定义了对平台上资源的操作权限。 权限定义了对平台上资源的操作权限,系统部署完成后预置了常用权限,称为系统权限。用户本身没有任何权限,需要在用户加入项目时为其指定角色,并将权限关联到角色,才能使用户具有对应的操作权限。 说明 系统权限结合用户视图、操作权限针对资源生成9种权限。 用户视图分为管理后台、域管理后台、项目视图; 操作权限分为管理权限、编辑权限、只读权限; 因此资源权限具体为全局下资源

  • 内容 在一个扩展中实现可选权限 步骤1:确定哪些权限作为可选,哪些作为必选。 步骤2:在manifest文件中声明可选权限 步骤3:扩展运行过程中请求可选权限 步骤4:扩展运行过程中检查的当前已有的权限 步骤5:扩展运行过程删除不再需要的权限 API 参考:Chrome.permissions 方法 contains getAll remove request 事件 onAdded onRemov