Android 各分区模块编译配置总结
一、分区与编译配置项对应表
该表清晰展示了不同目标分区在 Android.mk
(传统编译脚本)和 Android.bp
(现代编译脚本,Android 7.0+ 引入)中的核心配置项及适用场景,是模块分区编译的核心参考。
目标分区(Target Partition) | Android.mk 配置项 | Android.bp 配置项 | 适用场景说明 |
---|---|---|---|
System | 无需额外配置(默认分区) | 无需额外配置(默认分区) | Google 原生系统核心组件(如框架层、系统服务)、通用系统基础功能,厂商不建议修改 |
Vendor | LOCAL_VENDOR_MODULE := true |
vendor: true |
硬件平台通用组件(如芯片驱动框架、通用硬件服务),由芯片/方案厂商维护 |
Odm | LOCAL_ODM_MODULE := true |
device_specific: true |
硬件差异组件(如特定设备的传感器驱动、硬件参数配置),由产品厂商维护 |
Product | LOCAL_PRODUCT_MODULE := true |
product_specific: true |
软件差异组件(如厂商定制应用、品牌化桌面、专属功能),推荐厂商优先使用 |
system_ext | LOCAL_SYSTEM_EXT_MODULE := true |
system_ext_specific: true |
系统扩展组件(如需深度集成的系统级功能、框架扩展模块),Android 10+ 引入 |
二、各分区核心特点说明
1. System 分区
- 定位:系统根基分区,存放 Android 原生核心代码和组件,是系统运行的基础。
- 特点 :默认编译目标分区,无需额外配置;严禁厂商随意修改或添加内容,否则可能破坏系统兼容性或触发 Google 认证问题。
- 典型内容:Framework 框架、System Server、原生系统应用(如 Settings、Launcher3)。
2. Vendor 分区
- 定位:硬件抽象层的"通用容器",隔离硬件与系统,降低硬件对系统的依赖。
- 特点:存放同一硬件平台(如同一型号芯片)下所有产品共用的硬件相关模块;由芯片厂商(如高通、联发科)或方案商维护,保证硬件驱动的通用性。
- 典型内容:芯片级驱动(如 GPU 驱动、基带驱动)、硬件抽象层(HAL)通用实现。
3. Odm 分区
- 定位:硬件差异的"专属容器",解决同一硬件平台下不同设备的硬件细节差异。
- 特点:仅存放特定设备独有的硬件配置或驱动(如某款手机的摄像头校准参数、特殊按键驱动);由产品厂商(如小米、华为)维护,避免影响同平台其他产品。
- 典型内容:设备专属 HAL 配置、硬件校准文件、差异化外设驱动。
4. Product 分区
- 定位:软件定制的"主要载体",是厂商实现产品差异化的核心分区。
- 特点 :专注于软件层面的定制,不影响系统核心和硬件兼容性;推荐厂商将所有自定义模块优先放在此分区,便于管理和升级。
- 典型内容:厂商定制应用(如 MIUI 应用商店、华为钱包)、品牌主题、专属系统功能(如隐私保护模式)。
5. system_ext 分区
- 定位:系统扩展的"补充分区",用于需深度集成但又不适合放入 System 分区的模块。
- 特点:Android 10 及以上版本引入,拥有接近 System 分区的权限,可调用系统核心接口;解决"需集成到系统但又非原生组件"的需求,避免污染 System 分区。
- 典型内容:系统级扩展框架(如厂商自研的推送服务框架)、需与 Framework 交互的系统功能模块。
三、通用编译与分区选择注意事项
1. 模块打包核心规则
所有分区的模块,仅配置分区属性无法自动打包到镜像 ,必须在设备配置文件(如 device/<厂商>/<设备名>/device.mk
)中通过以下语句声明:
makefile
PRODUCT_PACKAGES += <模块名1> <模块名2> ...
声明后,编译系统才会将模块编译并放入对应分区的指定目录(如 bin/
、lib/
、app/
)。
2. 分区选择原则
遵循"公共部分放 System/Vendor,差异部分放 Odm/Product"的核心逻辑,具体优先级如下:
- 若为 Google 原生组件 → 无需配置,默认放入 System 分区;
- 若为硬件通用模块(同芯片平台共用)→ 放入 Vendor 分区;
- 若为硬件差异模块(特定设备独有)→ 放入 Odm 分区;
- 若为软件定制模块(厂商自定义功能/应用)→ 优先放入 Product 分区;
- 若为需深度集成的系统扩展模块(Android 10+)→ 放入 system_ext 分区。
3. 关键禁忌
- 禁止在 System 分区添加厂商自定义模块,避免破坏系统稳定性和兼容性;
- 不建议将软件差异模块放入 Vendor/Odm 分区,需与硬件相关模块严格区分,降低维护成本。