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