SDK 开发最佳实践之一:为你的 SDK 增加 No-Op 版本

笔者在开发和维护 Bugtags SDK 的一年多时间里面,趟过了不少坑,走了不少弯路,也积累了不少经验。这个 SDK 开发最佳实践系列,就是分享经验教训,帮助读者打造一款跟 Bugtags 这样快速成长的 SDK。

SDK 的使用场景

站在用户的角度来看,引入一个 SDK 可能会带来几方面的问题: - 包增大 - 可能不稳定 - 安全性问题

对于一些 SDK,产品形态是允许在测试阶段开启,上线移除的,例如性能调试工具,测试工具等。

区分版本方案

最简单的,就是手动注释代码,应用中如果只使用了这个 SDK 的一个 API,那还好,如果用到了多个,分布在不同的文件中, 这事儿就麻烦了。很不优雅。

最优雅的方案

思考一下这个需求

  • 应用分为 debug/release 版本
  • 无痛切换,最好能够实现自动化

大部分的编译系统,例如 Gradle/Maven 都可以区分版本,引入不同的包。利用这个特性,我们可以实现一个 No-Op SDK。

这个 SDK 具有如下特点:

  • 具有正式 SDK 的所有可以被外部引用的类
  • 具有正式 SDK 的所有对外 API
  • 足够的精简
  • 提示正在使用 No-Op SDK

最后的结果

以 bugtags 为例:

1
2
debugCompile 'com.bugtags.library:bugtags-lib:2.0.0'
releaseCompile 'com.bugtags.library:bugtags-noop:2.0.0'

以 leakcanary 为例:

1
2
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

扩展

如果你是一个 SDK 的使用者,即便官方没有提供 No-Op 版本,你完全可以自己写一个。

相关文章推荐