OpenHarmony 的“一多開發”指的是 一次開發,多端部署(簡稱“一多”),即使用 一套代碼工程,一次開發上架,按需部署到不同終端設備上
🎯 核心概念速覽
產品形態定義
寫在前面:
1.不同的形態其實本質差異體現在子系統和部件的差異,openharmony操作系統底層其實屏蔽了不同內核之間的差異,使其2in1(2in1和PC其實是相同的,只是換了稱呼)設備類型也可以在TV上運行,在phone/default類型設備也可以運行。
2.vendor目錄下的產品形態配置文件(比如vendor\hihope\dayu210\config.json)會根據相同合并、差異覆蓋的方式更新productdefine\common\inherit\phone.json。
3.ArkTs即應用層主要體現在: “deviceTypes”: [
“phone”,
“tablet”
]
4.需要注意是的部分設備形態在低版本的API上是不支持的,其底層通過SysCap能力集合來區分不同的設備差異,當然也可以通過配置使其都支持。
5.不同設備類型通過bundleManager(BMS)安裝子系統來進行校驗,即HAP所設置的deviceTypes與實際設備類型不符合,是無法安裝的。
不同形態編譯命令:
方式一:
./build.sh -product-name dayu210 -ccache --device-type=tv
僅作參考,實際并不希望隨意更改設備類型。(不符合設計規范)
方式二:
hb命令在配置好自己的產品后,執行hb set命令會顯示你的定制產品
.hb build -ccache --device-type=tv
OpenHarmony采用分層解耦的產品定義架構,將產品配置分為三個層次:
層次 | 描述 | 配置位置 | 示例 |
---|---|---|---|
系統類型 | 基礎系統能力 | base/ | mini/small/standard |
設備形態 | 產品類別模板 | inherit/ | phone/tablet/watch |
產品實例 | 具體產品配置 | products/ | system-arm64-default |
系統類型對比表
特性 | 輕量系統(mini) | 小型系統(small) | 標準系統(standard) |
---|---|---|---|
最小內存 | 128KB | 1MB | 128MB |
內核類型 | LiteOS-M | LiteOS-A/Linux | Linux |
處理器架構 | Cortex-M/RISC-V 32位 | Cortex-A | Cortex-A |
圖形能力 | 無界面 | 基礎GUI | 完整3D加速 |
應用框架 | 無 | 輕量級JS | 完整ArkUI |
分布式能力 | 基礎通信 | 完整軟總線 | 全場景協同 |
典型設備 | 傳感器、手環 | 攝像頭、路由器 | 手機、平板、車機 |
📁 源碼目錄架構
目錄結構
productdefine/common/ [源碼根目錄]
├── base/ # 系統類型基礎配置
│ ├── mini_system.json # 輕量系統最小集 [128KB+]
│ ├── small_system.json # 小型系統最小集 [1MB+]
│ └── standard_system.json # 標準系統最小集 [128MB+]
├── inherit/ # 設備形態模板庫
│ ├── chipset_common.json # 芯片通用模板
│ ├── headless.json # 無頭系統模板
│ ├── ipcamera.json # IPCamera模板
│ ├── phone.json # 手機模板 [通話+數據]
│ ├── tablet.json # 平板模板 [大屏+觸控]
│ ├── wearable.json # 穿戴設備模板 [低功耗]
│ ├── tv.json # 電視模板 [多媒體]
│ ├── 2in1.json # 二合一設備模板
│ └── rich.json # 全功能模板
└── products/ # 具體產品配置├── ohos-sdk.json # SDK產品配置├── system_arm_default.json # 32位ARM配置└── system_arm64_default.json # 64位ARM配置
🔍 產品形態本質區別分析
1. 系統架構差異
🏗? 內核架構對比
🎯 系統能力矩陣
能力維度 | 輕量系統 | 小型系統 | 標準系統 |
---|---|---|---|
進程管理 | 任務調度 | 多進程 | 多用戶多進程 |
內存管理 | 靜態分配 | 動態分配 | 虛擬內存 |
文件系統 | 輕量級FS | 完整FS | 多文件系統 |
網絡協議 | 基礎TCP/IP | 完整協議棧 | 全協議支持 |
圖形系統 | 無 | 基礎GUI | 3D加速 |
安全機制 | 基礎加密 | 完整安全框架 | 企業級安全 |
2. 設備形態特性對比
📱 手機形態 (phone.json)
核心特征:
- 通話能力:完整電話協議棧
- 移動網絡:2G/3G/4G/5G/5G-A/6G支持
- 位置服務:GPS/北斗/基站定位
- 傳感器:加速度計、陀螺儀、磁力計
- 相機:前后置攝像頭支持
- 電池管理:精確電量管理
配置片段:
{"component": "telephony","features": []
}
📱 平板形態 (tablet.json)
核心特征:
- 大屏適配:10-13英寸屏幕優化
- 觸控優化:多點觸控、手勢識別
- 分屏多任務:多窗口并行運行
- 無通話模塊:相比手機裁剪電話功能
- 增強圖形:更高分辨率支持
差異化配置:
{"inherit": ["productdefine/common/inherit/rich.json"],"subsystems": [{"subsystem": "telephony",// 移除電話功能"components": [] }]
}
? 穿戴形態 (wearable.json)
核心特征:
- 超低功耗:深度睡眠模式
- 健康監測:心率、血氧、步數
- 小屏適配:1-2英寸圓形/方形屏幕
- 藍牙連接:BLE低功耗通信
- 簡化UI:極簡交互界面
功耗優化配置:
{"component": "power_manager","features": ]
}
📺 電視形態 (tv.json)
核心特征:
- 大屏顯示:55-85英寸4K/8K支持
- 遙控器:紅外/藍牙遙控
- 媒體播放:4K視頻解碼、HDR支持
- 網絡連接:WiFi 6、有線以太網
- 無觸控:純遙控器操作
媒體能力配置:
{"component": "multimedia","features": []
}
🔧 產品配置詳解
配置繼承機制
🧬 三層繼承架構
?? 配置優先級規則
- 高優先級: 產品實例配置
- 中優先級: 設備形態模板
- 低優先級: 系統類型基礎
關鍵配置字段解析
📋 產品配置文件結構
{"version": "3.0", // 配置格式版本"product_name": "system-arm64-default", // 產品唯一標識"device_company": "ohos", // 廠商標識"target_cpu": "arm64", // 目標CPU架構 [arm/arm64/x86/riscv]"board": "arm64", // 開發板型號"type": "standard", // 系統類型 [mini/small/standard]"enable_ramdisk": true, // 是否啟用ramdisk"build_selinux": true, // 是否啟用SELinux"inherit": ["rich.json"], // 繼承的模板列表"subsystems": [...] // 子系統配置
}
🎯 CPU架構支持矩陣
CPU架構 | 輕量系統 | 小型系統 | 標準系統 | 典型設備 |
---|---|---|---|---|
ARM Cortex-M | ? | ? | ? | STM32、ESP32 |
ARM Cortex-A | ? | ? | ? | 樹莓派、RK3568 |
ARM64 | ? | ? | ? | 手機、服務器 |
RISC-V 32 | ? | ? | ? | 物聯網芯片 |
RISC-V 64 | ? | ? | ? | 開發板 |
📊 系統能力對比分析
子系統能力矩陣
子系統類別 | 輕量系統 | 小型系統 | 標準系統 | 功能描述 |
---|---|---|---|---|
arkui | ? | 基礎版 | 完整版 | UI框架 |
telephony | ? | 基礎版 | 完整版 | 電話功能 |
multimedia | ? | 基礎版 | 完整版 | 多媒體處理 |
location | ? | 基礎版 | 完整版 | 位置服務 |
connectivity | 基礎版 | 完整版 | 完整版 | 網絡連接 |
security | 基礎版 | 完整版 | 企業級 | 安全框架 |
distributed | ? | 基礎版 | 完整版 | 分布式能力 |
內存占用對比
系統類型 | 最小內存 | 推薦內存 | 存儲空間 | 啟動時間 |
---|---|---|---|---|
輕量系統 | 128KB | 512KB | 1MB | <1s |
小型系統 | 1MB | 4MB | 16MB | 2-5s |
標準系統 | 128MB | 512MB | 2GB | 10-30s |
🛠? 實戰配置指南
創建新產品形態
步驟1: 選擇基礎系統類型
# 根據硬件資源選擇
- 128KB-512KB內存 → mini_system.json
- 1MB-16MB內存 → small_system.json
- 128MB+內存 → standard_system.json
步驟2: 選擇設備形態模板
# 根據產品類型選擇
- 手機 → phone.json
- 平板 → tablet.json
- 手表 → wearable.json
- 電視 → tv.json
- 通用設備 → rich.json
步驟3: 創建產品配置文件
// products/my_product.json
{"version": "3.0","product_name": "my-custom-device","device_company": "mycompany","target_cpu": "arm64","board": "myboard","type": "standard","inherit": ["productdefine/common/inherit/rich.json","productdefine/common/inherit/phone.json"],"subsystems": [{"subsystem": "custom","components": [{"component": "my_custom_feature","features": ["custom_feature_enable=true"]}]}]
}
配置驗證流程
? 驗證步驟
- 語法檢查: JSON格式驗證
- 依賴檢查: 子系統依賴關系
- 內存估算: 內存占用計算
- 功能測試: 核心功能驗證
🔍 驗證工具
# 使用build.sh驗證
./build.sh --product-name my_product --check-only# 查看最終部件列表
cat out/preloader/my_product/parts.json
🔍 配置分析
系統類型詳細配置對比
以下是三種系統類型的詳細組件對比:
📊 輕量系統 (mini_system.json)
{"subsystems": [{"subsystem": "hiviewdfx","components": ["hilog_lite","hievent_lite","hidumper_lite"]},{"subsystem": "startup","components": ["bootstrap_lite","appspawn_lite"]},{"subsystem": "communication","components": ["dsoftbus","ipc"]},{"subsystem": "security","components": ["device_auth","huks_lite"]},{"subsystem": "commonlibrary","components": ["utils_lite"]},{"subsystem": "updater","components": ["sys_installer_lite"]},{"subsystem": "thirdparty","components": ["libcoap","lwip","mbedtls","cJSON","zlib","libboundscheck","cmsis","nvram"]}]
}
📊 小型系統 (small_system.json)
{"subsystems": [{"subsystem": "hdf","components": ["hdf_core","hdf_driver_framework","hdf_device_desc","hdf_config_manager","hdf_platform"]},{"subsystem": "kernel","components": ["liteos_a"]},{"subsystem": "hiviewdfx","components": ["hilog_lite","hievent_lite","hidumper_lite"]},{"subsystem": "startup","components": ["bootstrap_lite","appspawn_lite","init_lite"]},{"subsystem": "communication","components": ["dsoftbus","ipc","samgr_lite"]},{"subsystem": "security","components": ["device_auth","huks_lite","access_token_lite"]},{"subsystem": "commonlibrary","components": ["c_utils","utils_lite"]},{"subsystem": "updater","components": ["sys_installer_lite"]},{"subsystem": "thirdparty","components": ["libcoap","lwip","mbedtls","cJSON","zlib","libboundscheck","cmsis","nvram","musl","libffi"]}]
}
📊 標準系統 (standard_system.json)
{"subsystems": [{"subsystem": "hdf","components": ["hdf_core","hdf_driver_framework","hdf_device_desc","hdf_config_manager","hdf_platform","hdf_usb"]},{"subsystem": "communication","components": ["ipc","dsoftbus","net_manager"]},{"subsystem": "systemabilitymgr","components": ["samgr","safwk"]},{"subsystem": "hiviewdfx","components": ["hilog","hitrace","hidumper","hievent","hisysevent","hiview","faultloggerd"]},{"subsystem": "security","components": ["access_token","huks","deviceauth","selinux_adapter","dataclassification","iam"]},{"subsystem": "commonlibrary","components": ["c_utils","memory_utils"]},{"subsystem": "updater","components": ["update_service","update_engine"]},{"subsystem": "developtools","components": ["hdc","hidumper","hitrace"]},{"subsystem": "thirdparty","components": ["mbedtls","openssl","zlib","jsoncpp","libxml2","libcurl","cares","nghttp2","libffi","libunwind","libcxx","libcxxabi","compiler_rt","libc","musl","e2fsprogs","f2fs-tools","exfatprogs","dosfstools"]}]
}
設備形態配置詳解
🖥? 無頭系統 (headless.json)
專為無顯示界面的設備設計,如服務器、網關:
部分,實際請參照prodefine目錄下的配置文件
{"version": "3.0","subsystems": [{"subsystem": "build","components": ["build_framework"]},{"subsystem": "startup","components": ["startup_l2","init","appspawn"]},{"subsystem": "hiviewdfx","components": ["hilog","hitrace","hidumper","hievent","hisysevent","hiview","faultloggerd"]},{"subsystem": "distributedhardware","components": ["device_manager"]},{"subsystem": "security","components": ["device_auth","huks","access_token","selinux_adapter","dataclassification","iam"]},{"subsystem": "account","components": ["os_account"]},{"subsystem": "communication","components": ["ipc","dsoftbus","net_manager","bluetooth"]},{"subsystem": "ability","components": ["ability_runtime","ability_base","abilityms","ability_manager","abilityms_client"]},{"subsystem": "arkui","components": ["napi"]}]
}
📹 IPCamera (ipcamera.json)
專為網絡攝像頭設計,集成多媒體能力:
部分:
{"version": "3.0","subsystems": [{"subsystem": "arkui","components": ["ace_engine","napi"]},{"subsystem": "account","components": ["os_account"]},{"subsystem": "distributeddatamgr","components": ["preferences","kv_store","relational_store","data_storage","distributeddata"]},{"subsystem": "filemanagement","components": ["user_file_service","file_api","storage_manager","filemanagement_libn"]},]
}
配置字段深度解析
🔧 關鍵配置字段說明
字段名 | 數據類型 | 必填 | 說明 | 示例值 |
---|---|---|---|---|
version | string | ? | 配置格式版本 | “3.0” |
product_name | string | ? | 產品唯一標識符 | “my_custom_device” |
device_company | string | ? | 廠商代碼 | “hisilicon” |
target_cpu | string | ? | CPU架構 | “arm64/arm/x86/riscv” |
board | string | ? | 開發板型號 | “hi3516dv300” |
type | string | ? | 系統類型 | “standard/small/mini” |
enable_ramdisk | boolean | ? | 啟用ramdisk加速 | true/false |
build_selinux | boolean | ? | 啟用SELinux安全 | true/false |
inherit | array | ? | 繼承的模板列表 | [“rich.json”, “phone.json”] |
subsystems | array | ? | 子系統配置數組 | […] |
🎯 子系統配置結構
{"subsystems": [{"subsystem": "arkui", // 子系統名稱"components": [ // 組件列表{"component": "ace_engine", // 組件名稱"features": [ // 特性配置 (可選)]}]}]
}
高級配置技巧
🔄 動態配置繼承
{"inherit": ["productdefine/common/base/standard_system.json","productdefine/common/inherit/rich.json","productdefine/common/inherit/phone.json"],"subsystems": [{"subsystem": "telephony","components": [{"component": "cellular_call","features": ["5g_support=true","volte_enable=true"]}]}]
}
?? 條件編譯配置
{"subsystems": [{"subsystem": "graphic","components": [{"component": "graphic_2d","features": ["gpu_acceleration=false","gpu_acceleration=true",]}]}]
}
最佳實踐案例
📱 創建自定義手機產品
場景: 基于標準系統創建一款中低端4G手機
- 基礎配置 (products/my_phone.json):
{"version": "3.0","product_name": "my-4g-phone","device_company": "mycorp","target_cpu": "arm","board": "mt6765","type": "standard","enable_ramdisk": true,"build_selinux": true,"inherit": ["productdefine/common/base/standard_system.json","productdefine/common/inherit/phone.json"],"subsystems": [{"subsystem": "telephony","components": [{"component": "cellular_call","features": []}]},{"subsystem": "multimedia","components": [{"component": "camera_standard","features": []}]}]
}
- 內存優化配置:
{"subsystems": [{"subsystem": "graphic","components": [{"component": "graphic_2d","features": ["gpu_acceleration=true","memory_optimization=aggressive"]}]}]
}
? 創建智能手表產品
場景: 基于小型系統創建低功耗智能手表
{"version": "3.0","product_name": "my-smartwatch","device_company": "mycorp","target_cpu": "arm","board": "nrf52840","type": "small","enable_ramdisk": false,"build_selinux": false,"inherit": ["productdefine/common/base/small_system.json","productdefine/common/inherit/wearable.json"],"subsystems": [{"subsystem": "sensors","components": ["accelerometer","gyroscope","heart_rate_sensor"]},{"subsystem": "powermgr","components": [{"component": "power_manager","features": ["low_power_mode=extreme","always_on_display=true"]}]}]
}
🚨 常見錯誤及解決方案
錯誤類型 | 錯誤信息 | 根因分析 | 解決方案 |
---|---|---|---|
JSON格式錯誤 | Expecting ‘,’ delimiter | 缺少逗號或括號 | 使用JSON驗證工具 |
依賴缺失 | Component ‘xxx’ not found | 未包含所需子系統 | 檢查inherit配置 |
內存溢出 | Out of memory | 組件過多或配置過大 | 裁剪不必要的組件 |
架構不匹配 | CPU arch incompatible | target_cpu配置錯誤 | 檢查CPU架構設置 |
權限錯誤 | Permission denied | SELinux配置問題 | 調整安全策略 |
配置模板速查表
📋 快速配置模板
設備類型 | 基礎系統 | 推薦模板 | 關鍵特性 |
---|---|---|---|
智能手機 | standard | phone.json + rich.json | 通話、4G/5G、相機 |
平板電腦 | standard | tablet.json + rich.json | 大屏、無通話 |
智能手表 | small | wearable.json | 低功耗、健康監測 |
智能電視 | standard | tv.json + rich.json | 4K視頻、遙控器 |
IPCamera | standard | ipcamera.json | 視頻采集、網絡傳輸 |
IoT網關 | small | headless.json | 無界面、網絡功能 |
開發板 | standard | rich.json | 全功能、開發調試 |
📚 附錄:源碼文件清單
📁 基礎系統類型文件
productdefine/common/base/
├── mini_system.json # 輕量系統 - 128KB內存
├── small_system.json # 小型系統 - 1MB內存
└── standard_system.json # 標準系統 - 128MB內存
📁 設備形態模板文件
productdefine/common/inherit/
├── rich.json # 全功能模板
├── phone.json # 手機專用模板
├── tablet.json # 平板專用模板
├── wearable.json # 穿戴設備模板
├── tv.json # 智能電視模板
├── 2in1.json # 二合一設備模板
├── headless.json # 無頭系統模板
├── ipcamera.json # 網絡攝像頭模板
└── chipset_common.json # 芯片通用模板
📁 產品配置示例
productdefine/common/products/
├── ohos-sdk.json # SDK產品配置
├── system_arm_default.json # 32位ARM系統
├── system_arm64_default.json # 64位ARM系統
├── system_riscv32.json # 32位RISC-V系統
└── system_riscv64.json # 64位RISC-V系統
📊 組件統計對比表
系統類型 | 子系統數量 | 組件總數 | 第三方庫 | 典型內存占用 |
---|---|---|---|---|
mini_system | 7 | 25+ | 8個 | 128KB-512KB |
small_system | 9 | 35+ | 11個 | 1MB-16MB |
standard_system | 10 | 50+ | 20個 | 128MB-512MB |
rich.json | 23 | 80+ | 40+ | 512MB+ |
phone.json | 25+ | 100+ | 45+ | 1GB+ |
🎯 實際應用建議
選擇系統類型的決策樹
硬件資源評估:
├── 內存 < 1MB → mini_system.json
├── 內存 1-128MB → small_system.json
└── 內存 >= 128MB → standard_system.json功能需求評估:
├── 需要完整UI → standard + rich.json
├── 需要通話功能 → standard + phone.json
├── 需要穿戴功能 → small + wearable.json
└── 需要攝像頭 → standard + ipcamera.json
內存優化檢查清單
- 移除不必要的子系統
- 禁用GPU加速 (gpu_acceleration=false)
- 減少第三方庫依賴
- 使用輕量級組件 (xxx_lite)
- 啟用內存壓縮 (memory_compression=true)
- 調整緩存大小 (cache_size=small)
編譯驗證流程
# 完整編譯
./build.sh --product-name my_product --ccahe