LOCAL_PRIVILEGED_MODULE 详解(4)

本文详细解析了LOCAL_PRIVILEGED_MODULE在Android ROM中的作用,特别是它如何影响packages.xml中的privateFlags字段。当LOCAL_PRIVILEGED_MODULE设为true,system/priv-app中的应用在packages.xml中对应的privateFlags值为8,此值来源于ApplicationInfo.PRIVATE_FLAG_PRIVILEGED。此外,还探讨了PackageManagerService如何处理这些信息的内存和持久化存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.3 packages.xml中的privateFlags字段

前文提到,packages.xml 这个文件位于ROM设备的 data/system,读取需要root权限。记录系统中所有安装的应用信息,包含基本信息、签名和权限等。 与2.2类似,下面来分析确认一下privateFlags字段与LOCAL_PRIVILEGED_MODULE的关系。
PackageManagerService在install和scan应用的过程中,有些属性会持久化,以便下次使用。frameworks/base/services/core/Java/com/Android/server/pm/下有关的几个setting类:

abstract class SettingBase

/**
 * Settings base class for pending and resolved classes.
 */
abstract class PackageSettingBase extends SettingBase

/**
 * Settings data for a particular package we know about.
 */
final class PackageSetting extends PackageSettingBase

以上三个类是设置的item,即对应每个app的设置项。在PMS中,维护有成员变量

    final Settings mSettings;

Settings这个类同样位于frameworks/base/services/core/Java/com/Android/server/pm/,它包含一个PackageSetting的Map:

/**
 * Holds information about dynamic settings.
 */
final class Settings {
   
   
    ......
    final ArrayMap<String, PackageSetting> mPackages =
            new ArrayMap<String, PackageSetting>();
    ......
}

Settings的构造方法:

    Settings(Object lock) {
        this(Environment.getDataDirectory(), lock);
    }

    Settings(File dataDir, Object lock) {
        mLock = lock;

        mRuntimePermissionsPersistence = new RuntimePermissionPersistence(mLock);

        mSystemDir = new File(dataDir, "system");
        mSystemDir.mkdirs();
        FileUtils.setPermissions(mSystemDir.toString(),
                FileUtils.S_IRWXU|FileUtils.S_IRWXG
                |FileUtils.S_IROTH|FileUtils.S_IXOTH,
                -1, -1);
        mSettingsFilename = new File(mSystemDir, "packages.xml");
        mBackupSettingsFilename = new File(mSystemDir, "packages-backup.xml");
        mPackageListFilename = new File(mSystemDir, "packages.list");
        FileUtils.setPermissions(mPackageListFilename, 0640, SYSTEM_UID, PACKAGE_INFO_GID);

        // Deprecated: Needed for migration
        mStoppedPackagesFilename = new File(mSystemDir, "packages-stopped.xml");
        mBackupStoppedPackagesFilename = new File(mSystemDir, "packages-stopped-backup.xml");
    }

PMS中的mSettings是在PMS构造方法中被创建对象:

mSettings = new Settings(mPackages);

这次调用传递的参数是mPackages,这个在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值