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