Android学习之扩展android的权限管理

以CyanogenMod中关于动态开启/关闭APK的指定权限功能为例来分析

CyanogenMod在7.0的时候提供了revoke permission的功能, 可以从设置->CM设置->通用设置->权限管理, 打开这个功能. 从而可以动态的管理应用程序的权限.

具体介绍参见http://wiki.cyanogenmod.com/wiki/CyanogenMod_Settings


相关代码:

1. CM设置对应的代码为packages/apps/CMParts

从其AndroidManifest.xml中, 可以看出它需要有system的权限,这样才能保证它可以操纵permission相关的framework提供的接口和服务

android:sharedUserId="android.uid.system"

2. 在frameworks/base/core/java/android/widget/中增加了处理permission on/off的新的类:AppSecurityEditablePermissions

3. 对PackageManager.java/PackageManagerService.java等frameworks/base/core/的PM的逻辑进行了修改.

GrantedPermissions/SharedUserSetting中增加了新的revokedPermissions和effectivePermissions用来进行permission扩展的属性.

在PackageManagerService.java中的checkPermission,checkUidPermission函数, 增加了对revokedPermissions和effectivePermissions的检查逻辑,从而保证Setting中修改过的permission在运行时,能够生效.

4. 对于revokedPermissions和effectivePermissions的初始化

getRevokedPermissions/setRevokedPermissions/updateEffectivePermissions

5. 在系统中增加了一个叫做android.permission.REVOKE_PERMISSIONS的权限

参考资料:

apex: http://profsandhu.com/zhang/pub/apex.pdf
android security: https://www.blackhat.com/docs/webcast/bhwebcast30_anderson.pdf

更多相关文章

  1. 自定义一个自己的Log
  2. Android(安卓)安全机制
  3. [Android] Web Console: Uncaught TypeError: Object [object Ob
  4. Android(安卓)网络开发
  5. 我的翻译:Saving Files
  6. 绕过身份检测,破解Android(安卓)SU
  7. android:sharedUserId="android.uid.system" 的使用
  8. Unity功能记录(五)------ Android(安卓)studio打包aar包后与unity
  9. PreferenceActivity

随机推荐

  1. SQL分页查询方式汇总
  2. SqlServer中如何解决session阻塞问题
  3. MySQL 5.7 create VIEW or FUNCTION or P
  4. 利用SQL Server数据库邮件服务实现监控和
  5. SQL Server 2012安装后服务器名称找不到
  6. 当master down掉后,pt-heartbeat不断重试
  7. SQL Server 树形表非循环递归查询的实例
  8. SQL SERVER 9003错误解决方法
  9. SqlServer 英文单词全字匹配详解及实现代
  10. SQL SERVER 2000 9003错误的解决方法(只