保存在设备上的 /data/system/packages.xml 中 。
开机读取流程为:
Settings class :
的 readLPw 到 PermissionSettings.readPermissions(parser), 最终存入 PermissionSettings 的 mPermissions 变量中 :
/**
* All of the permissions known to the system. The mapping is from permission
* name to permission object.
*/
@GuardedBy("mLock")
final ArrayMap<String, BasePermission> mPermissions =
new ArrayMap<String, BasePermission>();
所以我们可以在 PermissionSettings 定义一个方法来打印所有的权限,然后在 Settings 中来调用这个方法 。
public void dumpAllPermissionsNames(PrintWriter pw){
pw.println("size "+ mPermissions.keySet().size());
for(String a: mPermissions.keySet())
{
pw.println(" "+a);
}
}
下面这个方法加在 frameworks/base/services/core/java/com/android/server/pm/Settings.java中 ,然后加入 dump 系统 ,就可以打印了 。
void dumpAbcd(PrintWriter pw) {
mPermissions.dumpAllPermissionsNames(pw);
}
比如我的是这样运行:
adb shell dumpsys package abcd
打印后发现系统有622个权限。