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 分区,需与硬件相关模块严格区分,降低维护成本。
相关推荐
louisgeek4 小时前
Java 线程池取消的方式
android
Billy_Zuo4 小时前
人工智能机器学习——模型评价及优化
android·人工智能·机器学习
tangweiguo030519875 小时前
Flutter与原生混合开发:实现完美的暗夜模式同步方案
android·flutter
雨白6 小时前
深入理解 Android 触摸事件:以实现 ViewPager 为例
android
shenshizhong6 小时前
看懂鸿蒙系统源码 比较重要的知识点
android·harmonyos
一只修仙的猿7 小时前
再谈性能优化,一次项目优化经历分享
android·性能优化
雮尘9 小时前
Android性能优化之枚举替代
android
2501_9159090611 小时前
苹果上架App软件全流程指南:iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传与审核技巧详解
android·ios·小程序·https·uni-app·iphone·webview
2501_9159214311 小时前
iOS 文件管理与能耗调试结合实战 如何查看缓存文件、优化电池消耗、分析App使用记录(uni-app开发与性能优化必备指南)
android·ios·缓存·小程序·uni-app·iphone·webview