Android 各分区模块编译配置(mk/bp)总结

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"的核心逻辑,具体优先级如下:

  1. 若为 Google 原生组件 → 无需配置,默认放入 System 分区;
  2. 若为硬件通用模块(同芯片平台共用)→ 放入 Vendor 分区;
  3. 若为硬件差异模块(特定设备独有)→ 放入 Odm 分区;
  4. 若为软件定制模块(厂商自定义功能/应用)→ 优先放入 Product 分区;
  5. 若为需深度集成的系统扩展模块(Android 10+)→ 放入 system_ext 分区。

3. 关键禁忌

  • 禁止在 System 分区添加厂商自定义模块,避免破坏系统稳定性和兼容性;
  • 不建议将软件差异模块放入 Vendor/Odm 分区,需与硬件相关模块严格区分,降低维护成本。
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui