
2.2 SDK设计规范
2.2.1 SDK通用规范
·SDK发布时需配套有完整且详细的使用说明文档,包括混淆配置说明。
·SDK需要详细记录每个版本的变更内容。
·SDK如果对外开放,需要有一个专门的网站,同时附上SDK的说明文档、demo、变更历史等。
·SDK的minSdkVersion要尽量小,最好不要超过使用SDK的项目的minSdkVersion。
·尽量不要引用第三方库,要尽量使用Android系统自带的功能,然后在其基础上进行封装。如果一定要用到第三方库,可以使用provided依赖,并告知调用方主动依赖这个第三方库。
·如果打出来的包是AAR格式的,需要注意res下面的资源文件名称,以避免和调用方的res文件名称冲突,所以一般SDK里面的res文件名称需加上特定的修饰符,例如公司 + 项目名称。
·SDK需要有较强的容错性,要增大力度对SDK内部的异常进行捕获。
·SDK对外提供的接口,需要对其传入的参数的合法性和有效性进行检测。
·SDK内部对于关键路径要有详细的Log记录,便于后期排查问题。
2.2.2 SDK开发规范
SDK需要做到代码结构层次分明,功能清晰。
一个典型的SDK一般可以分为以下3层。
1. 接入层
接入层的功能就是对外提供接口,供给调用方使用。一般对外提供的接口我们会定义一个接口文件,里面的方法都是可以对外提供的接口。所以接入层一般都是定义的接口文件,另外还有一个统一管理所有业务功能模块的类,是外界跟SDK交互的统一入口。它还负责统一配置和进行初始化工作,例如初始化业务模块的Manager文件。
2. 业务层
业务层的作用就是实现具体的业务逻辑。对于业务层的设计,我们会按照业务功能划分为不同的模块,每一个模块通过对应的Manager文件进行管理,并且Manager文件会具体实现接入层定义的接口方法。
3. 基础层
基础层里面包括各种功能模块,例如SDK自行封装的网络请求模块,还有数据库模块、日志模块、Crash模块等。总而言之就是对业务层提供支持。
图2.1所示是SDK各层调用流程图。

图2.1 SDK各层调用流程图
2.2.3 SDK开发实例
一个完整的SDK项目实例目录结构如图2.2所示。

图2.2 SDK项目实例目录结构
其中api代表接入层,business代表业务层,common代表基础层。