FIDL API 兼容性测试

我们会使用 API 兼容性测试来确保以受支持的平台 API 级别为目标平台的 SDK 用户不会因对 FIDL API 的更改而遭到破坏。在合作伙伴 Fuchsia SDK 中发布的所有 FIDL API 都应自动进行测试,以确保向后兼容性。本文档介绍了什么是 API 兼容性测试以及如何使用此类测试。

概念

FIDL 版本控制

读者应熟悉 FIDL 版本控制

API 级别

如需了解 API 兼容性测试,请务必对 Fuchsia API 级别有基本的了解。API 级别表示在构建应用时可用的一组 API。它们是无符号的 64 位整数,按递增顺序分配给 Fuchsia 平台。

请注意以下两个 API 级别:

  1. 处于开发阶段的 API 级别 - 这是 Fuchsia 开发者进行额外的更改。
  2. 稳定的 API 级别 - 此级别是稳定的,其表面区域不会改变。

平台版本控制的当前实现尚未反映这一点:在 Fuchsia 源代码树中,我们在 //sdk/version_history.json 中记录了 API 和 ABI 版本记录以及级别状态(“开发中”和“受支持”,也称为稳定版)。

API 级别演变

API 级别会经历几个阶段,如下图所示:

         +----------------+ freeze +--------+  drop  +-------------+
START -> | in-development | -----> | stable | -----> | unsupported |
         +----------------+        +--------+        +-------------+

开发中

在此阶段,API 级别正在积极发展,因为可能会引入新的 API 元素、可能会引入废弃等。不允许对此级别引入的 API 进行重大更改,贡献者应确保没有任何合作伙伴仍然依赖于在此级别移除的 API。

稳定版

API 级别无法再接收更改。贡献者应开始向合作伙伴介绍处于开发阶段的 API 级别。当我们“冻结”某个 API 级别时,该级别可能不会再收到更改。这通常发生在剪切分支之前。它至少将获得 6 周的支持,或者直到 Fuchsia 平台停止支持它。可以在此级别废弃 API,但不能将其删除。

不支持

当我们放弃对某个级别的支持后,Fuchsia 贡献者可以自由删除或修改该级别的任何 API,并且我们会停止对此级别的兼容性测试。不再保证最终用户能够成功以此 API 级别为目标平台。

解决兼容性问题

通常,兼容性问题可以通过在 FIDL 声明中添加 @available 注解来解决。

下面是更改 FIDL API 时需要遵循的一些良好准则。

  1. 使用 @available(added=HEAD) 为尚未稳定的新 API 添加注解。
  2. 使用 @available(added=20) 为可提供给合作伙伴的新稳定 API 添加注解。
  3. 移除 API 时,请先确保没有合作伙伴仍在使用该 API,然后使用 @available(removed=21) 为旧 API 添加注解。

如需查看更多示例,请参阅 API 演变指南FIDL 兼容性指南