从零开始的Android SDK开发

参考文章:

浅谈一个优秀的 Android SDK 需要具备哪些要点

实际生产中的 Android SDK开发总结| 完结 - 开发者头条

实际生产中的 Android SDK开发总结

Android SDK 开发经验浅谈

Android SDK开发与使用的那些事儿

Android Studio(九):引用jar及so文件_无缘公子-CSDN博客

零、基本概念

什么是SDK?

SDK 的全称是 Software Development Kit,即软件开发工具包,通常是为辅助开发某类软件而编写的特定软件包。

广义上的 SDK 是为特定的软件包、软件框架、硬件平台、操作系统等建立应用程序时所使用的开发工具的集合,狭义上的 SDK 则是基于系统 SDK 进行开发包装的、新的、独立的、能够完成特定功能并返回相关数据的一组工具的集合。

App 开发与 SDK 开发的区别

App 开发偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而 SDK 开发偏向于功能方面,注重功能的开发实现,关于 UI 的设计与开发占比很少。

Android SDK分类

SDK可以分为AAR、JAR、SO三类,关系可以用下图表示:

image.png

  1. jar包

jar文件就是 Java Archive File,java归档文件,是与平台无关的文件格式,将许多文件组合成一个压缩文件,jar文件以 .zip格式为基础,不仅用于压缩和发布,还用于部署和封装库、组件和插件程序,并且可以被像编译器和JVM这样的工具直接使用,jar文件只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。直接放进libs目录下即可使用。

  1. so库

一般来说,so是C或C++语言的内容打包成的库,引用so库需要将so文件复制、粘贴到“jniLibs”目录内(没有则创建)。

  1. aar包

即Android Archive,是Android库项目的二进制归档文件,包含了代码、资源(图片、布局等)、so库等的集合。将aar解压(后缀改为.zip,再解压文件)打开后,可以看到每个aar解压后的内容可能不完全一样,但是都会包含AndroidManifest.xml,classes.jar,res,R.txt。

使用:拷贝到libs目录,修改build.gradle 配置compile(name: 'genius', ext:'aar')

如何选择?

如果只是开发或使用一个简单的类库那么使用生成的 .jar文件即可;

如果涉及到native,或者需要提高性能,那么可以考虑使用so库;

如果需要开发或使用的是一个UI库,包含一些控件布局文件以及字体等资源文件那么就只能使用.aar文件。

一、SDK开发原则

设计一个SDK,有两个明确的原则贯穿始终:

1、最小可用性原则,即用最少的代码,如无必要勿增实体;

2、最少依赖性原则,即用最低限度的外部依赖,如无必要勿增依赖。

  1. 基本原则

开发 SDK 中,最重要的一条基本原则是要尽可能的稳定,不能影响集成方的功能(例如:不能出现 crash、不能出现性能问题等)。

  1. 设计原则

2.1 接口易用性

  1. 控制接口数量
  2. 规范接口命名

2.2 编码规范

最好的状态是集成方看到代码就能知道是哪家厂商的 SDK。换句话说就是 SDK 的编码规范统一,形成自己公司的品牌效应,同时也方便集成方的使用。

2.3 跨端一致性

对于同一套 SDK,尽量保持各端接口命名、实现逻辑的一致。

2.4 避免依赖第三方库

  • 避免与集成方由于使用相同的三方库引起的冲突,增加集成方的集成难度;
  • 三方库会不断更新。如果引入三方库,则 SDK 需要及时保持更新,会增加额外的维护工作量;
  • 由于引入三方库,出现问题时导致排查困难。

2.5 “小”而“精”

  • “小” 是指 SDK 的体积要尽可能的小。避免造成集成方的 App 体积增加较大,不然会引起集成方的不满,甚至下架 SDK;
  • “精” 是指功能要专注。例如:我们的 SDK 是用于埋点,如果提供很多常见的工具类显然是不合适的。

2.6 兼容性

在 SDK 开发中更要保证新版本对于旧版本的兼容,常见的兼容性问题分为两类:

  1. 新老接口兼容性:功能接口设计要考虑扩展性。

  2. 新功能兼容性:一部分集成方使用了该功能,需要保证该功能正常读取。一部分集成方没有使用到该功能,要确保无异常出现。

  3. 完善的SDK文档说明

3.1 接入指南

对于 SDK 的集成和使用、版本更新和接口介绍,一定要准备比较完善的用户接入指南。SDK 接入指南可以分为:

  • 基本使用
  • 高级使用
  • SDK API

一份完整的指导文档还是非常有必要,它可以节省很多集成的成本和时间。同时,文档需要合理的规划设计。避免一份文档内容太多,造成阅读困难。对于使用性的部分,最好有示例代码进行展示。

3.2 测试报告

在实际的接入过程中,有很多集成方需要提供相关的性能测试说明,这部分的内容需要及早准备。测试报告可以通过研发协助测试进行输出,方便后续的支持工作,降低维护成本。

  1. 常见问题

4.1 不做臆想需求

  • 如果有别的客户不想通过配置文件,想使用接口怎么办;
  • 如果用户想删除配置文件中已配置项怎么办;
  • 如果客户想恢复忽略的配置怎么办。

这些臆想的需求,会增加很多额外的工作和交付成本,并且没有实际的意义。因此,在 SDK 开发中一定要避免臆想的需求。

4.2 过多的接口

在 SDK 中经常会有很多初始化开关配置接口,这类接口一般是暴露 set 方法让用户去设置。通常在初始化时一次性配置,因此这类配置项一般就不需要提供 get 方法,避免接口太多。过多的接口会造成代码的维护成本增加,包括后期需要兼容的成本都会增加。

4.3 跨端一致性

对于 SDK 研发来说,常会遇到同一个需求需要在 Android、iOS 和 Web 三端同步实现,这就需要三端的研发和测试同学能够相互沟通,确保三端的逻辑实现一致。在这个过程中,最难把控的就是细节点的一致性。出现细节不一致的问题,通常是由于测试 case 很难覆盖到,研发同学没有针对细节流程进行沟通交流而导致的。

因此,为了避免这类问题,对于细节点的方案实现可以让三端的研发同学相互进行沟通交流,争取在研发阶段把不一致的细节暴露出来,防止出现线上不一致的问题

二、开发方法

2.1 新建module

新建一个新Module,并引用到项目中

image.png

image.png

2.2 编译aar包

编写好代码后,build生成release版本的aar

点击左下角的Build Variants栏,把sdk的module 的 Active Build Variant改为release

image.png

ReBuild工程

image.png

对应module目录的outputs文件夹下会生成对应的aar包

image.png

2.3 其他工程引用aar

将以上aar包拷贝到其他项目的对应module的libs文件夹下

image.png

并修改gradle配置:

//与dependencies同级
repositories {
    flatDir {
      dirs 'libs'
    }
  }
复制代码
//dependencies下
implementation(name:'testsdk', ext:'aar')
复制代码

sync下项目,就可以在对应module下使用该aar了

猜你喜欢

转载自juejin.im/post/7053327489174601759