SDK简介

SDK(Software Development Kit),广泛意义上的 SDK 一般都是为特定的软件包、软件框架、硬件平台、操作系统等建立应用程序时所使用的开发工具的集合(系统 SDK)。而狭义上的 SDK应用 SDK) 则是基于系统 SDK 进行开发的新的、独立于具体业务且完成特定功能的一组工具的集合。通常情况下,SDK 在应用程序中是作为特定功能提供者的角色出现的。例如推送功能的 SDK、统计功能的 SDK、广告功能的 SDK、性能监测功能的 SDK 以及分享功能的 SDK 等等。

SDK设计

  • 易用性
  • 稳定性
  • 灵活性
  • 最小资源开销
  • 主线程
  • 最小权限原则
  • 严格的生命周期把控

API设计

  • 单一职责原则
  • 参数尽可能少
  • 参数合法性校验
  • 优美的降解(预期的异常抛出)
  • 实现不要影响API

版本管理

1
2
3
4
5
6
7
8
9
10
     alpha版本
+
v
beta版本
+
v
release candidate版本(rc版)
+
v
release版本(发布)
  • alpha 版:该版本表示该 SDK 产品在此阶段主要是以实现功能为主,通常只在开发团队内部交流使用。一般来说,该版本的 SDK 产品存在的 Bug 较多,需要经历多个 alpha 版本的迭代才能进入 beta 版。

  • beta 版:该版本相对于 alpha 版已经有了很大的改进,修复了严重的 Bug,但是还存在一些已知或是未知的 Bug,通常情况下只在开发团队以及测试团队之间交流使用,需要经历多个 beta 版本的迭代才能进入 rc 版。

  • release candidate 版(rc 版):该版本的 SDK 趋于成熟,基本上不会出现导致错误的 Bug,原则上不再增加新的功能,与正式发布的正式版没有太大的差异。通常情况下该版本用于进行小规模灰度测试,原则上不会提供给应用程序开发者使用。

  • release 版:该版本意味着 最终发布,在经历了前面几个版本的迭代之后产生的最终版本,也就是最终交付到应用程序开发者使用的版本。

SDK版本号命名

一个比较合理的版本号命名规范由如下四部分组成:

V1_0_2_201904301717_beta

  1. 主版本号(1)
  2. 子版本号(0)
  3. 阶段版本号(2)
  4. 迭代版本号(201904301717_beta)

SDK版本号修改原则:

  • 主版本号:当功能模块有较大的变动,比如增加多个模块或者 SDK 整体架构发生变化时,由需求决定是否修改。

  • 子版本号:当功能有一定的增加或变化时,由项目决定是否修改。

  • 阶段版本号:当修复 Bug 以及小规模调整时,需要经常发布修订版,此时可由项目经理决定是否修改。

  • 迭代版本号:用于记录该版本的 SDK 发布时的时间以及当前的迭代状态。原则上,当项目处于 alpha、beta以及 rc 版时,该版本号需要体现每一次的修改时间以及状态。当项目处于 release 版时,该版本号用于记录该版本的发版时间。

API版本管理

API的版本受到 SDK 版本迭代状态的约束,但是不受 SDK 版本号修改原则的限制。
只有处于 release(或rc ) 状态的 API 才能是对外提供服务的,否则该 API 应该是对应用程序开发人员不可见的。换句话说就是,坚决不发布处于 alpha 和 beta 状态的 API。

API 一旦对外发布,其内部实现以及方法签名原则上处于不可变更状态:

如果需要修改 API 的内部实现,在保证方法签名不变的情况下,API 必须通过测试用例的边界及功能测试,并尽可能的给出原 API 实现的备份——使用oldMethodName前缀标识原 API;
如果需要变更方法签名,比如增加、删除参数或是改变返回值类型,那么在保证原 API 不变的情况下,使用方法重载实现新的 API。
如果需要废弃某些 API,应在 SDK release 版本迭代的前 N 个版本使用@deprecated标识需要废弃的 API,并给出该 API 的替代方案以及具体的 API 移除时间(或是 SDK 版本)。

Reference

Android SDK 开发(第一部分