移动端SDK开发经验总结及梳理
做Android开发很多年了,多次思考过App开发和SDK开发在架构⽅⾯及其他各个⽅⾯的异同,以及各⾃⽅向开发时需要注意的事项。
下⾯是我个⼈对SDK开发的理解及相关经验分享。
⼀、SDK 开发概念
SDK即Software Development Kit,通常是为辅助开发某类软件,⽽编写的特定的软件包、框架集合。同App开发不同,⼀般我们开发的SDK为相对独⽴的业务、拥有特定功能的⼯具集合,使⽤SDK的⼀般为B端的⽤户,⼀般是集成SDK来实现相关功能的App端开发者,我们会以代码 + Demo + ⽂档的⽅式交付。
⼆、SDK 开发建议
1. 便于参考的Demo
集成 Demo 通常是⼀个简单的 App,⽤来展⽰如何快速地接⼊ SDK。Demo 的源码需要保证⽅便使⽤者参考,其版本变更策略和 SDK 版本的变化保持⼀致。它的开发原则也要与 SDK ⼀致,确保⾼质量的交付。
2. ⽅便查阅的⽂档
接⼊⽂档⽤来告诉 SDK 使⽤者,如何使⽤ SDK、详细使⽤步骤和可能发⽣的问题。⽂档内容包括:更新记录、基本信息、API 说明、集成步骤、FAQ等。好⽂档的标准就是清晰明了,通俗易懂。⼀个完全不懂 SDK 的开发者看着⽂档就能对接,对于经常遇到的问题要逐条列出,专业名词要有对应的解释。
3. 慎⽤⿊科技
开发SDK的⼈可以注意下以下⼏个点:
能⽤系统的API解决的,就不要使⽤第三⽅,减少对其他库的依赖
⿊科技虽然好,但是能不⽤的就不要⽤
多考虑第三⽅带来的影响
依赖其他SDK的,尽量别打包在⼀起
api接口和sdk接口的区别
能不⽤单例的就尽量少的使⽤
核⼼代码的安全性
三、SDK 开发要领
SDK是需要我们提供给其他开发者使⽤的,简洁和⾼效的对接是⾮常有必要的。如果对接⼀个SDK很繁琐,或者需要关⼼很多业务之外的问题,那么说明SDK的设计就是存在问题的。
1. SDK 易⽤性
SDK本⾝就是⼀些公⽤的代码或者业务的集合,内部做了很多⼯作,实现了很多细节。对于开发者⽽⾔,⼀个好的SDK应该是简洁易⽤的,不应该花费太多时间去对接。通过阅读Demo的代码和⽂档,就能对接好,才是SDK易⽤性的体现。
2. SDK 稳定性
我们必须要保证设计的SDK是稳定的,所以在SDK的设计及实现阶段,最好做到以下⼏点:
a). 尽量保证对外提供的API是稳定的,⾮特殊情况不要更改。
b). 必须要保证有稳定的业务⽀撑API的使⽤。
c). 尽可能屏蔽掉SDK的迭代过程,尽量让⽤户升级时只需要关注版本号即可,避免出现不必要的升级适配操作。
3. SDK ⾼性能
性能问题,⽆论是普通的SDK开发还是应⽤的开发,都需要考虑到。作为SDK的开发者,我们必须时刻注意到性能问题,否则会影响到接⼊SDK的App的整体性能。
⼀般的最需要关注的就是内存及电量这块的使⽤情况。
a). 优化SDK的内存占⽤。⼀般 SDK 和 App 运⾏在同⼀进程,此时 SDK 要管理好⾃⼰占⽤的内存,合理分配,注意释放,并避免出现内存抖动。
b). 优化电量消耗。尽量避免在后台运⾏⼀些不必要的服务,并优化SDK使⽤时的CPU使⽤情况。
四、SDK 设计规范
API 设计在任何开发中都⾮常重要,许多时候软件的质量好坏体现在 API 的设计上。
在普通的应⽤开发中,API 只会在开发⼈员间流通,不会暴露给⾮本应⽤开发的其他⼈员。但是 SDK 作为⼀种服务,需要向开发者暴露⼀部分 API,这样才能使⽤ SDK 的服务。
1. SDK 结构清晰
SDK提供给别⼈使⽤的时候,结构清晰⾮常重要,以下⼏个点,可以供⼤家参考:
⽂件组织⽅式清晰明了:给别⼈的SDK,解压下来后第⼀眼就能够分辨出每个⽂件夹是什么作⽤。资源⽂件,⽂档,demo,库,应该很容易进⾏区分。
类名前缀和包命名或者缩写要⼀致:⼀定要以正常思考⽅式进⾏命名或者缩写。建议以驼峰命名⽅式。
代码风格⼀定要⼀致:不要让⼈感觉接⼊过⼀个SDK,感觉到每⼀⾏代码都是不同⼈操⼑的。
函数命名遵循共性,表明其⽤途:命名这个问题,每个⼈都有⾃⼰的⼀套,但⾃⼰。
代码注释要规范和清楚:接⼊者不⼀定回去仔细看⽂档,所以接⼝⾥⾯的注释必须要认认真真写。
API的访问权限必须要控制:不应该出现⼀些不需要暴露出来的⽅法,必须控制好API的访问权限,避免出现因此导致的未知异常。2. SDK ⽅便调试
SDK提供给别⼈使⽤的时候,⽅便调试是很重要的,能减少对接过程中的问题反馈,以下⼏点可以参考:
可以对外提供当前SDK状态的⼀些属性:SDK应该提供⼀些⽅法和属性,让接⼊者知道SDK的当前状态,但是绝对不能让⽤户直接设置这些状态。
SDK功能正确:编译⽆警告和错误,⽀持最新的特性,这是⽤户⾃⾏调试解决问题的前提。
API调⽤简单:SDK好⽤不好⽤,看调⽤API就感受出来了。
便于调试:打印出SDK debug⽇志,给出⼀些提⽰性的信息,⽅便排查问题。
API回调参数明确:SDK调⽤完,需要在合理的实际给⽤户结果,设计好这些也能便于⽤户调试。
⼀般开发SDK是需要包含的辅助功能如下(这⾥指的是除去主业务功能之外的其他功能):
SDK使⽤⽇志系统,⾃由筛选不同⽇志。
Crash⽇志本地收集。
SDK版本控制系统,⽅便升级及排查问题。
以上这些功能不仅可以⽅便开发和调试,也提⾼了测试同学的效率。