Android.bp中sdk_version的module_current与system_current有什么区别?
Android.bp中
sdk_version配置module_current与system_current的差异及适用场景 核心差异
- API访问范围不同
module_current:仅允许访问Mainline模块公开API以及Android标准公共SDK API。Android 10之后推出的可独立OTA更新的Mainline模块(如媒体、蓝牙、权限控制器等)的公开接口都在该范围内,无法访问系统私有API、非Mainline的系统内部API。system_current:允许访问全系统级公开API,除基础SDK、Mainline模块API外,还包含系统服务、框架层对系统组件开放的专属API,权限覆盖整个AOSP框架的公开系统API集合。
- 编译校验规则不同
- 配置
module_current时,编译阶段会严格校验调用的API是否在Mainline模块公开API列表内,调用超范围API会直接触发编译报错。 - 配置
system_current时,编译校验范围放宽到全系统API白名单,只要是系统级开放的API都不会触发编译报错。
- 配置
- 兼容性绑定逻辑不同
module_current编译的组件兼容性绑定对应Mainline模块的版本,只要Mainline模块版本兼容,组件可跨不同Android系统版本运行,甚至可以随Mainline模块独立推送更新。system_current编译的组件兼容性绑定对应Android系统版本,仅能运行在同版本的系统镜像中,跨版本运行大概率出现API缺失、调用不兼容的问题。
适用场景
使用module_current的场景
- 开发的库属于Mainline模块的组成部分,或是需要随Mainline模块独立更新的配套组件
- 库不需要调用系统框架私有API,仅依赖Mainline公开API和基础公共SDK即可实现全部功能
- 库需要兼容多个Android系统版本,无需绑定特定系统镜像版本发布
使用system_current的场景
- 开发的库是系统内置组件,比如SystemUI、系统设置、框架层服务的配套依赖库
- 库必须调用系统框架层开放的非Mainline API才能实现功能,比如系统级状态管理、系统服务跨进程调用的专属接口等
- 库仅会随整包系统镜像一起发布,不需要跨Android版本独立更新
内容的提问来源于stack exchange,提问作者Bajrang Hudda
相关产品推荐
相关产品推荐

