权限管理AppOps

本文介绍了Android的权限管理系统AppOps,包括其概念、系统架构和代码分析。AppOps用于手动配置App权限,防止恶意软件和隐私泄露。文章详细讲解了AppOpsService和AppOpsManager的工作机制,并通过发送短信的实例展示了权限检查的过程。
摘要由CSDN通过智能技术生成


 一 什么叫权限管理?

    所谓权限管理,就是能够手动配置某个 App 的权限,进而阻止恶意软件以及防止隐私泄漏。当然,更进一步的权限管理,是能够在 App 动态使用某个权限的时候,弹窗提示用户允许和拒绝。这样的权限管理就更加类似于 Windows 中的主动防御。

 

二、系统架构

 2.1. 架构

  App Ops 的基本架构如图所示:

  

     其中包含两个重要部分,一个叫做AppOpsService,另外一个叫AppOpsManager。AppOpsService 是一个系统服务,注册的名字叫做 “appops”,由ActivityManagerService启动,启动后会调用 readWhitelist();读取预设的白名单,接下来读取data/system/appops.xml文件,解析里面的元素并存放到一个SparseArray<Op>中,以便权限检查时用。该文件在系统第一次启动的时候是没有的。后续关机或者设置中修改了应用权限的时候通过 writeState() 生成。

    AppOpsManager 是一个访问 AppOps 服务的类,同时有 Java 和 C 的实现,为了应对某些 native code 的服务,比如说 Camera。Settings 可以使用 AppOpsManger 来读取和修改权限管理信息。当其他 App 使用某个权限的时候,会通过 Binder 访问服务端的某项服务。在服务端的各个服务中都插入了检查权限的代码,同样通过使用 AppOpsManger 来检查权限。

2.2. 代码分析

 2.2.1 

  检查用户设定权限的函数是:checkOperation() 和 noteOperation(),区别是 checkOperation() 只是检查 Operation 的情况,noteOperation() 还会记录访问时间等信息,代码如下:

public int checkOperation(int code, intuid, String packageName) {

   verifyIncomingUid(uid);

   verifyIncomingOp(code);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值