当前位置:   article > 正文

Android PackageManagerService流程详细分析(四)之权限_getpackagemanager 权限声明

getpackagemanager 权限声明

接着上一节(三)的分析,看看上一节的PackageManagerService构造函数的代码如:

public PackageManagerService(Context context, Installer installer,
            boolean factoryTest, boolean onlyCore) 
{
    // 前面省略...

    // 第二节讨论过
    mInstaller = installer;

    synchronized (mInstallLock) {
    // writer
    synchronized (mPackages) {
    mHandlerThread.start();
    // 第三节讨论过
    mHandler = new PackageHandler(mHandlerThread.getLooper());

    // 本节分析内容
    readPermissions();

    } 

    // 后面省略...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

进入readPermissions函数,代码如下:
这里写图片描述

在机器里面,指定路径有这么一些文件:
这里写图片描述

下面进入解析函数(这是重点):

private void readPermissionsFromXml(File permFile) {
    FileReader permReader = null;
    try {
        permReader = new FileReader(permFile);
    } catch (FileNotFoundException e) {
        Slog.w(TAG, "Couldn't find or open permissions file " + permFile);
        return;
    }

    try {
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(permReader);

        XmlUtils.beginDocument(parser, "permissions");

        while (true) {
            XmlUtils.nextElement(parser);
            if (parser.getEventType() == XmlPullParser.END_DOCUMENT) {
                break;
            }

            String name = parser.getName();
            if ("group".equals(name)) {
                String gidStr = parser.getAttributeValue(null, "gid");
                if (gidStr != null) {
                    int gid = Integer.parseInt(gidStr);
            
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号