# multidevicecompatibility_compatibility_config_center **Repository Path**: cjwdoing/multidevicecompatibility_compatibility_config_center ## Basic Information - **Project Name**: multidevicecompatibility_compatibility_config_center - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: maste - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-08 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 兼容性配置中心 [English](./README.md) | 简体中文 ## 简介 **兼容性配置中心(Compatibility Config Center)** 是系统的部件之一,为应用兼容运行行为提供**系统兼容配置**与**应用开发者配置**的统一管理能力。 该组件负责加载 ROM 预置、云更新与应用 Profile 中的配置,按元数据规则合并后持久化至 SQLite。查询能力通过 DataShare 静默代理对外暴露。系统进程与三方应用可通过 Inner API(C++)读取合并后的配置项,用于驱动多设备兼容运行行为。 ### 核心能力 **配置管理服务** - 以系统服务进程(`compatibility_config_center`)形式运行,在包扫描及应用安装/变更等事件触发时按需启动。 - 解析 `config_meta.json`,合并多来源 JSON 配置并写入本地数据库。 - 支持折叠屏等设备形态差异,按设备状态选择对应配置目录加载。 **客户端查询接口** - **SystemCompConfigReader**:推荐在系统进程中使用,内置配置缓存与变更订阅,支持按 Bundle Name 和配置 Key 批量查询。 - **AppSpaceCompConfigReader**:推荐在应用进程中使用,仅返回对当前应用可见(app-space visible)的配置项。 - **CompConfigReadUtil**:无内置缓存的工具类,适合一次性查询或由调用方自行管理缓存。 **API 暴露** - **Inner API(C++)**:头文件位于 `interfaces/inner_api/clients/include/`,链接 `libcompconfigclient.z.so`。 > **说明**:兼容性配置中心是系统层部件,需编入系统镜像后方可使用。客户端 API 通过 DataShare 静默代理访问配置数据,无需与服务端直接通信。 ## 架构说明 ```text ┌─────────────────────────────────────────────────────────────┐ │ 配置来源 │ │ ROM 预置 JSON │ 云更新 JSON │ 应用 Profile 覆盖 │ └────────────┬────────────────────────────────────────────────┘ ▼ ┌────────────────────────┐ ┌──────────────────────────────┐ │ compatibility_config │────▶│ SQLite 持久化 + DataShare │ │ _center SA (8620) │ │ 对外查询 │ └────────────────────────┘ └──────────────┬───────────────┘ ▼ ┌─────────────────────────────────────────┐ │ clients (libcompconfigclient.z.so) │ │ ├─ SystemCompConfigReader (系统侧) │ │ ├─ AppSpaceCompConfigReader (应用侧) │ │ └─ CompConfigReadUtil (无缓存) │ └─────────────────────────────────────────┘ ``` ### 分层设计 组件采用分层架构: ```text interfaces/ # 对外 API(Inner API) ↓ clients/ # Native 客户端库(缓存与订阅) ↓ services/ # SA 服务(配置处理、存储、解析) ↓ utils/ # 版本、设备等公共工具 ``` **职责划分** 1. **services/**:承载 SA 实现,负责配置加载、合并、持久化及 DataShare 对外暴露。 2. **clients/**:提供 Native 客户端库,封装 DataShare 查询、缓存与变更事件订阅。 3. **interfaces/**:对外暴露 Inner API 头文件,供系统开发者使用。 4. **utils/**:版本比较、设备形态检测、日志等公共能力。 ### 模块概览 | 模块 | 路径 | 说明 | | --- | --- | --- | | SA 服务 | `services/core/` | 服务主逻辑、Bundle 与配置处理器 | | 存储层 | `services/storage/` | SQLite 数据库操作 | | 数据解析 | `services/data_parser/` | 配置合并与解析 | | Native 客户端 | `clients/native/` | C++ 客户端实现 | | Inner API | `interfaces/inner_api/clients/` | 对外 C++ 头文件 | | Init 配置 | `etc/` | init 进程服务配置 | | SA Profile | `sa_profile/` | System Ability 配置(SA 8620) | ### 与 multidevicecompatibility 子系统的关系 兼容性配置中心是多设备兼容子系统的基础部件,其他兼容相关模块通过它获取统一配置数据,而无需各自解析 JSON 文件。 **进程维度**: 1. 服务运行在 `compatibility_config_center` 进程中,在包生命周期按需启动。 2. 客户端库运行在调用方进程(系统服务或应用)中,通过 DataShare 静默代理访问配置数据,无需 SA 进程运行。 **职责维度**: 1. 服务负责配置摄入、合并、版本管理与持久化。 2. 客户端库负责查询封装、缓存与变更通知。 3. 调用方(系统模块或应用)通过客户端 API 消费配置,无需直接访问原始 JSON 文件。 ## 编译构建 兼容性配置中心是系统部件,需在完整 OpenHarmony 源码环境中编译。 ### 前置要求 - 系统源码 - 完整编译工具链 - 目标产品包含 `multidevicecompatibility` 子系统 ### 集成路径 将本仓库置于 系统源码树中: ```text foundation/multidevicecompatibility/compatibility_config_center/ ``` 在对应产品配置中确保包含 `compatibility_config_center` 组件,依赖关系见 [`bundle.json`](bundle.json)。 ### 编译目标 在foundation父目录执行编译命令 ```text ./build_system.sh --abi-type generic_generic_arm_64only --device-type general_all_phone_standard --ccache --build-variant root --build-target compatibility_config_center ``` 其中device-type为设备类型,build-target为编译目标 ## 开发指南 兼容性配置中心提供 C++ Inner API 进行查询。 ### Inner API(C++) 头文件位于 `interfaces/inner_api/clients/include/`,链接 `libcompconfigclient.z.so`。 **SystemCompConfigReader** — 推荐在系统进程中使用: ```cpp #include "system_comp_config_reader.h" using namespace OHOS::CompConfigClient; SystemCompConfigReader reader; reader.Init({"namespace:key1", "namespace:key2"}); auto [ret, configMap] = reader.GetConfig("com.example.app"); if (ret == E_OK) { // configMap: key -> value } ``` **AppSpaceCompConfigReader** — 推荐在应用进程中使用: ```cpp #include "app_space_comp_config_reader.h" AppSpaceCompConfigReader::Init("com.example.app"); auto [ret, value] = AppSpaceCompConfigReader::GetConfig("namespace:key1"); ``` **CompConfigReadUtil** — 无缓存一次性查询: ```cpp #include "comp_config_read_util.h" auto [ret, appConfig] = CompConfigReadUtil::GetConfigByApp("com.example.app"); auto [ret2, multiAppConfig] = CompConfigReadUtil::GetConfigByKeys({"key1", "key2"}); bool enabled = CompConfigReadUtil::IsFeatureEnable(); ``` | 接口 | 适用场景 | 主要方法 | | --- | --- | --- | | `SystemCompConfigReader` | 推荐在系统进程中使用,使用缓存与变更订阅 | `Init(keys)` / `GetConfig(bundleName, keys?)` | | `AppSpaceCompConfigReader` | 推荐在应用进程中使用,读取应用空间可见配置 | `Init(bundleName)` / `GetConfig(key)` | | `CompConfigReadUtil` | 一次性查询,调用方自行管理缓存 | `GetConfigByApp()` / `GetConfigByKeys()` / `IsFeatureEnable()` | ### 配置存储路径 | 类型 | 路径 | | --- | --- | | ROM 预置 | `/system/etc/multDeviceCenter/` | | 云推更新 | `/data/service/el1/public/update/param_service/install/system/etc/multDeviceCenter/` | | 运行时持久化 | `/data/service/el1/public/multidevicecompatibility/compatibility_config_center/` | 关键文件:`config_meta.json`(配置元数据)、`version.txt`(版本号)、`fold_status.json`(设备形态标识)。 ### 系统进程与启动机制 - **进程名**:`compatibility_config_center` - **SA ID**:8620 - **启动方式**:按需启动,触发事件包括: - `usual.event.BUNDLE_SCAN_FINISHED` - `usual.event.PACKAGE_ADDED` - `usual.event.PACKAGE_CHANGED` - `usual.event.PACKAGE_INSTALLATION_STARTED` - **配置文件**:[`sa_profile/compatibility_config_center.json`](sa_profile/compatibility_config_center.json) - **init 配置**:[`etc/compatibility_config_center.cfg`](etc/compatibility_config_center.cfg) ### 错误码 返回值 `0`(`E_OK`)表示成功,其他返回值表示失败。 ### 运行测试 测试目标定义见各子目录 `BUILD.gn` 及 [`bundle.json`](bundle.json) 中的 `test` 字段。 以性能测试为例,在foundation父目录执行编译命令: ```text ./build_system.sh --abi-type generic_generic_arm_64only --device-type general_all_phone_standard --ccache --build-variant root -v --args='is_debug=true' --build-target compconfigcenter_clients_benchmarktest ``` 将编译产物compconfigcenter_clients_benchmarktest置于对应的设备中执行,在所在目录下执行 ```text hdc shell compconfigcenter_clients_benchmarktest ``` ## 目录 ```text compatibility_config_center/ ├── bundle.json # 组件描述与编译目标 ├── compconfigcenter.gni # 路径常量 ├── clients/ # Native 客户端库 (libcompconfigclient.z.so) │ └── native/ ├── services/ # SA 服务实现 │ ├── core/ # 配置处理主流程 │ ├── storage/ # SQLite 存储层 │ ├── data_parser/ # 配置合并与解析 │ └── merge_config/ # 配置合并与Bundle刷新 ├── interfaces/ │ └── inner_api/clients/ # C++ 对外头文件 ├── utils/ # 版本、设备等工具 ├── etc/ # init 进程配置 ├── sa_profile/ # SA 配置文件 ├── scripts/ # 处理脚本 ├── test/ # 测试公共依赖 └── test_tools/ # 冒烟测试 ``` ## 约束 - **开发语言**:C++17及以上