最近整理以前开发中的笔记,发现有点零乱,遂决定将这些笔记整理迁移到 CSDN 上,分享出来与大家一起交流学习。如果有发现不当或有待商榷的地方,欢迎大家拍砖和指正。废话结束,进入本文正题:Android 隐藏的权限管理机制 AppOps。

1  AppOps概述

Android 的权限管理一直被广为诟病,也带来了很多安全隐患。Android 4.3 发布的时候,Google 报道出了一项隐藏功能App Ops(Application Operations),这被看作是Android的原生权限管理机制。不过,从 Android M 开

始,Google 正式推出了运行时权限管理机制 Android Runtime Permission,这也使得 App Ops 只能影藏在幕后了。但是有些隐藏权限的判断还需要用到 AppOps。

值得注意的是:AppOps 不仅仅是对 APP “权限”的管理,而包括对App“动作”的管理。我们平时讲的权限管理多是针对具体的权限(App 开发者在 Manifest 里申请的权限),而 AppOps 所管理的是所有可能涉及用户隐私和安全的操作,包括 access notification, keep weak lock,  activate vpn, display toast 等等,有些操作是不需要Manifest里申请权限的。

2  AppOps设置

AppOps 的权限设置是在系统的 Settings 里(我的华为手机,Settings 里权限管理),这个入口默认是被 Google 关闭了,有些厂商手机没有打开此项,可能没有此设置项。有三种可选项:允许 / 禁止 /提示,用户选择“提示”选项,则该 app在执行这一操作时,系统会给用户相应的提示,待用户选择后 app 继续执行。

3  AppOps 总体架构

AppOps 总体架构如图所示:

  • 核心服务:

AppOpsService

系统服务,系统启动时该服务会启动运行。

参考以下 ActivityManagerService.java,ActivityManagerService 启动过程中:

mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"), mHandler);
  • 配置文件:appops.xml、appops_policy.xml

Appops.xml位于 /data/system/ 目录下,存储各个 app 的权限设置和操作信息。

Appops_policy.xml位于 /system/etc/ 目录下,该文件只在 appops strict mode enable 时才会存在和使用。

  • API接口:AppOpsManager

AppOpsService 实现了大部分的核心功能逻辑,但它不能被其他模块直接调用访问,而是通过 AppOpsManager 提供访问接口。

  • UI层:AppOpsSummary,AppOpsCategory 等

上传UI显示以及基本逻辑处理。

4  AppOpsManager API接口简介

在 Android SDK 里能够看到部分 AppOps 的 API 接口,但是 Google 对此有说明:

     This API is not generally intended for third party application developers; most features are only available to system applications.  Obtain an
instance of it through Context.getSystemService with Context.APP_OPS_SERVICE.

即是说,这些 API 不是让第三方 app 使用的,而是供系统应用调用的。
   使用 Android SDK 开发应用,如果要调用这些 API 的话,也会编译不通过。
   但是想使用的话,可以尝试把 Android 源码里 AppOpsManager.java 打包一下,把 jar包导入自己的工程,就可以使用了。

部分重要的 API 接口如下:

     int checkOp(String op, int uid, String packageName)

Op对应一个权限操作,该接口来检测应用是否具有该项操作权限。

     int noteOp(String op, int uid, String packageName)

和checkOp基本相同,但是在检验后会做记录。

     int checkOpNoThrow(String op, int uid, String packageName)

和checkOp类似,但是权限错误,不会抛出 SecurityException,而是返回 AppOpsManager.MODE_ERRORED。

     int noteOpNoThrow(String op, int uid, String packageName)

类似noteOp,但不会抛出 SecurityException。

     void setMode(int code, int uid, String packageName, int mode)

这个是我们最需要的方法,改变 app 的权限设置,但偏偏被 google 隐藏了。
   code 代表具体的操作权限,mode 代表要更改成的类型(允许/禁止/提示)

正常情况下(如果OEM厂商没有做特殊处理),把 AppOpsManager.java 打包,引入 jar 包到工程内,是可以使用上述 API 接口的,也即是可以自行设计 UI,提供入口来改变 app 权限。具体权限对应的 code,可以查看 AppOpsManager.java 源码里的描述。

以上是个人对于 Android 隐藏的权限管理机制 AppOps 的认知,如有不当之处欢迎指正。如要了解 Android 更多的权限管理问题欢迎访问 Android动态权限管理:Android Runtime Permission。

Android隐藏的权限管理机制:AppOps相关推荐

  1. Android原生权限管理:AppOps

    --------------------- 从Android M开始,Google就正式推出了官方的权限管理机制Android Runtime Permission. AppOps终究没有走到台面^^ ...

  2. android 9.0 权限管理_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  3. Android 6.0 权限管理最佳实践

    博客: Android 6.0 运行时权限管理最佳实践 github: https://github.com/yanzhenjie/AndPermission

  4. android 权限管理框架,Android 运行时权限管理最佳实践

    欢迎访问我的个人博客 传送门 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予.此方法可以简化应用安装过程,因为用户在安装或更新应用时不需 ...

  5. android 跳转权限管理的代码,Android权限管理

    Android权限管理 说明 在targetSdkVersion的值为23或者更高,就要进行权限管理,否则如果运行在Android6.0或以上的设备会没有相应权限而导致崩溃 请求权限后,在onRequ ...

  6. android 加网络权限管理,Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw-- ...

  7. Linux驱动学习--android中的内存管理机制ION(一)--简单介绍

    目录 一.引言 二.ION的介绍及使用 ------> ION介绍 ------> ION的使用 ------> HEAP种类 三.接口分析 ------> 主要数据结构 -- ...

  8. Android应用程序权限管理

    在Android源码frameworks/base/api/current.txt中定义了所有应用程序所需的权限 https://blog.csdn.net/gjy_it/article/detail ...

  9. android 华为开发权限管理,android开发 华为 点击跳转到权限管理页面

    private void goHuaWeiSetting()  { try { //HUAWEI H60-l02 P8max测试通过 Log.d(MainActivity.class.getSimpl ...

最新文章

  1. sklearn随机森林模型:ValueError: Unknown label type: ‘unknown‘
  2. GSVA包进行基因集变异分析
  3. 您能看出这个Double Check里的问题吗?(解答)
  4. 关于子对话框的创建与销毁
  5. 代码分析+原理图解——棋盘覆盖问题-分治法
  6. python一元三次方程拟合_一元三次方程的求根公式
  7. 【重难点】【RabbitMQ 02】如何避免消息重复投递和消息重复消费、如何防止消息丢失、如何保证消息的顺序性、如何保证消息队列的可用性
  8. Jedis之ShardedJedis虚拟节点一致性哈希分析
  9. MMP,我兄弟转正前一天,一个垃圾公司把他辞退了!
  10. golang 猜数字小游戏
  11. 代码开源为黑客敞开了大门
  12. Typora免费版官网下载
  13. Unity 通过修改图片透明度实现淡出效果
  14. 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
  15. mysql中常用动词_mysql常用sql语句总结
  16. 生物大分子的计算机模拟就业,生物大分子体系结合自由能及构象变化的计算机模拟...
  17. MATLAB cwt连续小波变换 绘制小波振幅谱(影响锥coi)的三个函数示例(cwt contourf pcolor)
  18. Lua三人帮出新书 Lua Programming Gems
  19. 手机端软件 小界面有“大江湖”
  20. 【Linux】VIM命令(全面详解)

热门文章

  1. 【CSS】用CSS画太极图
  2. xpath爬取airbnb民宿价格信息,为啥用属性定位不到元素,但是用文本内容模糊匹配却可以
  3. 联通光猫 nat转发 - 虚拟主机设置
  4. ios 左右滑动手势
  5. 【luogu 3868】中国剩余定理模板题
  6. PR安装出现错误代码:195
  7. CodeForces 596 B Wilbur and Array
  8. 纯css svg 改变图片颜色 ios android 小程序
  9. 程序媛 :逛 GitHub 开源项目吗? 很沙雕的那种!
  10. 【前后端分离登录流程】