android p data/system目录下几个重要文件的作用

PMS

PMS 就是PackageManagerService,主要是负责应用的安装卸载更新等工作。

            scanDirTracedLI(new File(VENDOR_OVERLAY_DIR),
                    mDefParseFlags//0 wjc
                    | PackageParser.PARSE_IS_SYSTEM_DIR,
                    scanFlags//SCAN_BOOTING | SCAN_INITIAL|SCAN_FIRST_BOOT_OR_UPGRADE;wjc
                    | SCAN_AS_SYSTEM
                    | SCAN_AS_VENDOR,
                    0);
            scanDirTracedLI(new File(PRODUCT_OVERLAY_DIR),
                    mDefParseFlags
                    | PackageParser.PARSE_IS_SYSTEM_DIR,
                    scanFlags
                    | SCAN_AS_SYSTEM
                    | SCAN_AS_PRODUCT,
                    0);

            /// M: Support RSC overlay dir
            sPmsExt.scanDirLI(PmsExt.INDEX_RSC_OVERLAY, mDefParseFlags, scanFlags, 0);
            mParallelPackageParserCallback.findStaticOverlayPackages();

            // Find base frameworks (resource packages without code).
            scanDirTracedLI(frameworkDir,
                    mDefParseFlags
                    | PackageParser.PARSE_IS_SYSTEM_DIR,
                    scanFlags
                    | SCAN_NO_DEX
                    | SCAN_AS_SYSTEM
                    | SCAN_AS_PRIVILEGED,
                    0);

PMS 通过上面scanDirTracedLI来解析应用,并保持应用的信息。
如何保持信息,是通过本身的Settings类来实现的,这个类在com.android.server.pm

    Settings(File dataDir, PermissionSettings permission, Object lock) {
        mLock = lock;
        mPermissions = permission;
        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);

        final File kernelDir = new File("/config/sdcardfs");
        mKernelMappingFilename = kernelDir.exists() ? kernelDir : null;

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

从上面看,主要是保持到data/system目录下的几个文件中

data/system 几个重要文件


    packages.xml维护的是应用包的基本信息,权限信息、用户权组信息等等。信息比较详细。
    packages.list维护的是应用包列表,只是包含具体的包名以及存储的路径等等信息。
    packages-stopped.xml 维护的是被停掉的应用

packages.list

com.mediatek.lbs.em2.ui 10054 0 /data/user/0/com.mediatek.lbs.em2.ui platform:targetSdkVersion=28 1023,3003
com.android.cts.ctsshim 10073 0 /data/user/0/com.android.cts.ctsshim default:targetSdkVersion=24 none
com.ais.mimo.eservice 10086 0 /data/user/0/com.ais.mimo.eservice default:targetSdkVersion=26 3003
com.android.vpndialogs 10040 0 /data/user/0/com.android.vpndialogs platform:privapp:targetSdkVersion=28 none
com.android.phone 1001 0 /data/user_de/0/com.android.phone platform:privapp:targetSdkVersion=26 1065,3002,1023,3003,3001,3007,1002,3010,3011,1004,2002,3006
com.android.shell 2000 0 /data/user_de/0/com.android.shell platform:privapp:targetSdkVersion=28 1065,3002,1023,1002,3010,3011
com.android.wallpaperbackup 1000 0 /data/user/0/com.android.wallpaperbackup platform:privapp:targetSdkVersion=28 1065,3002,1023,3003,3001,3005,3006
com.android.providers.blockednumber 10015 0 /data/user_de/0/com.android.providers.blockednumber default:privapp:targetSdkVersion=28 1065
com.android.providers.userdictionary 10015 0 /data/user/0/com.android.providers.userdictionary default:privapp:targetSdkVersion=28 1065
com.android.emergency 10008 0 /data/user_de/0/com.android.emergency platform:privapp:targetSdkVersion=28 none

### 关于 Android 11 中 `system_server` 对 `/data/local/` 的读写权限 在 Android 11 中,为了增强系统的安全性与稳定性,Google 加强了对敏感目录的访问控制策略。这包括限制某些系统服务对特定路径(如 `/data/local/`)的读写操作。 #### 安全模型概述 Android 使用 SELinux 和文件系统权限来管理不同进程之间的资源隔离。对于 `system_server` 进程而言,在 Android 11 及更高版本中,默认情况下其对 `/data/local/` 路径的访问受到严格限制[^2]。这是因为 `/data/local/` 主要用于调试目的,并不推荐作为常规数据存储位置。 如果尝试通过 `system_server` 修改该目录下的内容,则可能会遇到类似于以下错误消息: ``` java.lang.SecurityException: Permission Denial: writing to /data/local/ requires android.permission.WRITE_SECURE_SETTINGS, or grantUriPermission() ``` 此行为源于 Android 平台的安全设计原则——即减少潜在攻击面并防止恶意应用滥用高危 API 或者篡改核心组件配置文件等内容[^4]。 #### 解决方案探讨 当确实存在合法需求允许 `system_server` 访问这些受保护区域时,可以考虑以下几个方向: 1. **调整SELinux policy** 如果设备处于开发模式下或者属于定制ROM环境,可以通过自定义SEPolicy规则放宽相应约束条件。例如创建一个新的.te文件定义额外许可项。 ```bash allow system_server data_file:file rw; ``` 2. **利用特权应用程序白名单机制** 针对需要特殊授权的应用程序实例(比如上述提到修改后的内置System Apps),应该将其加入到Privileged Permissions Whitelist当中去。具体方法是在对应APK清单文件(MANIFEST.XML)内部声明所需权限标签的同时也要确保它们被正确注册到了build.prop或者其他相关属性列表里面。 3. **切换至其他可替代存储位置** 推荐做法是从根本上规避直接依赖受限分区的操作方式转而采用官方支持的标准接口完成目标功能实现。例如使用Context#getDir()获取私有缓存空间来进行临时文件处理等场景适用的任务迁移工作流程优化建议[^1]. 以下是基于Java代码片段展示如何安全地保存数据而不违反现代移动操作系统框架规定的一个例子: ```java File dir = context.getDir("my_custom_dir", Context.MODE_PRIVATE); if (!dir.exists()) { boolean success = dir.mkdirs(); } // Proceed with reading/writing files inside this secure sandboxed area... ``` 以上措施均需谨慎评估可能带来的风险以及遵循最佳实践指导方针执行实施计划安排表单填写完毕后再提交审核批准手续办理进度查询链接地址如下所示http://example.com/approval/status?id=1234567890abcdefg. ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值