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 分区,需与硬件相关模块严格区分,降低维护成本。
相关推荐
一直向钱14 小时前
android 基于okhttp的socket封装
android·okhttp
夜晚中的人海15 小时前
【C++】异常介绍
android·java·c++
蜀中廖化19 小时前
Android Studio 导入 opencv
android·opencv·android studio
奋斗的小鹰19 小时前
ASM Bytecode Viewer 插件查看kotlin和java文件的字节码
android·kotlin·asm
欢喜躲在眉梢里1 天前
mysql中的日志
android·运维·数据库·mysql·adb·日志·mysql日志
路上^_^1 天前
安卓基础组件019-引导页布局001
android·安卓
梦终剧1 天前
【Android之路】UI消息循环机制
android·ui
zh_xuan1 天前
Android android.util.LruCache源码阅读
android·源码阅读·lrucache
梦终剧1 天前
【Android之路】安卓资源与编译初步
android
mykrecording1 天前
launch Activity流程
android·app