Android Frameworks frameworks/base/core/api/current.txt 的作用

190 阅读3分钟

一、核心作用

  1. ​API 版本快照​

    • current.txt 记录了当前编译环境中 ​​已批准的 API 版本号​​(如 Android 13 对应 API 33)。
    • 在编译过程中,系统会通过此文件验证代码中使用的 API 是否与当前版本一致,防止引入未发布的 API 或回退已废弃的接口
  2. ​编译时 API 检查​

    • 当代码中调用了某个 API,但当前编译环境的 current.txt 中未包含该 API 的声明时,编译器会报错,提示需要更新 API 版本或添加 @hide 注解(隐藏 API)。
    • 例如:若在 Android 13(API 33)中调用 Android 14 的 API,编译时会提示 API 未批准 错误
  3. ​跨模块 API 一致性​

    • 在复杂系统(如车载 Android 或定制 ROM)中,不同模块(如 Framework、Services)需共享同一套 API 定义。current.txt 确保所有模块基于相同的 API 版本编译,避免接口冲突

二、文件内容与结构

  • ​典型内容示例​​:

    # Android 13 (API 33) platform_api=33

  • ​作用说明​​:

    • platform_api 字段明确当前系统 API 的版本号。
    • 文件通常位于 frameworks/base/core/api/ 目录下,与 api/ 目录中的其他 API 定义文件(如 current.xml)配合使用

三、典型使用场景

  1. ​新增或修改系统 API​

    • 开发者新增一个公共 API(如 Context.newFeature())后,需执行 make update-api 命令,自动更新 current.txt 中的版本号,并生成对应的 API 文档。

    • 若未更新 current.txt,编译时会报错:

      You have tried to change the API from what has been previously approved.

  2. ​系统镜像兼容性验证​

    • 在设备厂商定制 ROM 时,需确保 current.txt 中声明的 API 版本与设备硬件驱动、HAL 层接口兼容。例如,车载系统调用 UnisocPowerManager 时,需验证其 API 版本是否支持当前功能
  3. ​第三方 SDK 集成​

    • 若 Android 系统预装第三方 SDK(如地图服务),需检查 SDK 的 API 版本是否与 current.txt 声明一致,避免因版本不匹配导致运行时崩溃

四、与其他文件的关联

  1. api/ 目录下的其他文件​

    • current.xml:定义 API 的具体接口(如类、方法、字段)。
    • removed.txt:记录已废弃的 API,用于编译时警告开发者。
    • current.txt 通过版本号关联这些文件,形成完整的 API 管理体系
  2. ​构建系统依赖​

    • 在 Android.mk 或 Android.bp 中,通过 LOCAL_SDK_VERSION 指定模块依赖的 API 版本,构建系统会基于 current.txt 校验依赖关系

五、操作命令示例

  1. ​更新 API 版本​

    make update-api # 自动生成或更新 current.txt

  2. ​检查 API 变更​

    make api-stubs-docs-update-current-api # 高版本 Android 的专用命令

  3. ​手动修改(不推荐)​

    • 直接编辑 current.txt 可能导致版本号与实际代码不一致,需通过构建系统自动维护

六、常见问题与解决

  • ​编译错误:API 版本不匹配​
    ​解决​​:执行 make update-api 后重新提交 current.txt 的变更,提交前需通过代码审核(如 Gerrit)
  • ​隐藏 API 暴露​
    ​解决​​:若需临时使用未公开 API,可在代码中添加 @hide 注解,但需后续通过 update-api 同步到官方 API 列表

总结

current.txt 是 Android 系统 API 版本管理的核心文件,通过强制版本校验确保系统各模块的兼容性和稳定性。开发者需严格遵循其更新流程,避免因 API 版本冲突导致编译或运行时问题。