前言
通常涉及到的网络请求在项目中为了方便管理,我们都会做成一个SDK 统一进行调用管理。一般的网络请求方面不会涉及到资源的管理和相关图标的展示之类的,所以封装成一个.a文件更加方便一下。
sdk,又称api;Software Development Kit的缩写,译为”软件开发工具包”,通常是为辅助开发某类软件而编写的特定软件包,框架集合等,SDK一般包含相关文档,范例和工具。 SDK可以分为系统SDK和应用SDK.所谓的系统SDK是为特定的软件包,软件框架,硬件平台,操作系统等简历应用时所使用的开发工具集合.而应用SDK则是基于系统SDK开发的独立于具体业务而具有特定功能的集合。
什么是API
API是Application Programming Interface,又称为应用编程接口,是软件系统不同组成部分衔接的约定。更加通俗的说就API就是我们常见和编写的方法或函数。
SDK构成
SDK主要包含Framework,API及Library的三部分. Framework定义了SDK整体的可重用设计,规定了SDK各功能模块的职责以及依赖关系.其中个功能模块体现为Library.模块之间的内部通信及SDK外部通信(SDK对外提供服务的接口)则通过API进行.
另外完整的SDK还应该包含大量的示例和其他工具.比如在Android SDK的tools目录下提供了大量的辅助开发工具.
浅谈SDK实现目标
SDK的实现目标.任何应用都应具备:简洁易用,稳定,高效,轻量,SDK作为一种特定应用当然也不例外.
1.简洁易用
1-1 不应该让使用者花费太长时间学习的
一个好的产品对第三方使用者使用而言应该是简洁易用,不应该让使用者花费太长时间学习的.
1-2 SDK不应该对宿主应用有过多的代码侵入
要保证较少的代码侵入主要在对外提供服务时充分考虑到使用者的使用场景来设计出优良的API. 一个优良的API在定义的时候应该满足绝大数开发者所预期的方式—语义上要求通俗易懂,使用上要求简单可靠. 一个优良的API首先是简单可靠的.在正常使用的情况下体现为稳定可靠的执行,在异常情况下体现为及时的告知使用者使用错误.初次之外,遵循一致的明明规则,并是所有的API呈现出一致的风格对开发而言无疑是个好消息.
1-3 不应该有复杂频繁的接入工作
不应该有复杂频繁的接入工作.比如当开发者需要使用SDK的服务时,只需要在缘由的代码中新增一行即可 当我们需要使用该SDK的服务时,通过一行代码便可启用
Ad.init(this,params)
SDK整体架构设计
1.模块化开发
1-1 单一职责
根据单一职责将系统拆分为不同的小模块,每个模块保持相对独立。
1-2 协议或接口通信
模块之间通过协议或接口通信,以减少相互之间的依赖耦合.模块内部按照设计的几大原则进行实现,以保证模块本身可以灵活实现 对于现代开发而言,模块化是常用的手段,从宏观角度来看,模块是系统最小的组成单元.
2.组件化开发
组件是对逻辑的封装,并具备单个可移植性.比如可以把日志记录做成一个组件,之后它可以被轻松在应用在不同的项目中. 对于android 开发者而言,Android 提供的每个UI 控件同样也是组件,比如Button,TextView等。 将整个项目划分成多个模块,几个模块或者单个模块作为一个组件,开发过程中我们可以对每个组件进行并行开发,最后发布时通过依赖将组件合并成完整的应用。 随着android的逐渐成熟,现在的app业务越来越复杂,与此同时,android工程也变得日益庞大,代码行数十几万已经是常态,此时有几个问题便会凸显出来:
工程任何一点改动都会造成整个工程的重新编译 业务耦合度非常高,牵一发而动全身.这就造成了”老人不敢改,新人无法改”。协作开发基本上是不可能的。
根据实际情况对其进行组件化,比如我们将分享功能组件化,可以轻松<typo id="typo-1652" data-origin="的" ignoretag="true">的</typo>支持多种渠道的分享,在需要更新分享功能时,可以对其进行单独的编译和测试。
3.插件化开发
SDK不同于普通应用,不能频繁的进行更新,以免让开发者觉得SDK不稳定或者让开发者频繁的集成.SDK看起来变化较慢,实则变化频繁.就以以前做的广告SDK而言,有时候经常需要对某类机型进行数据采集或者及时更新反作弊模块,在没有使用插件化之前,解决该问题是非常麻烦的。 我们将SDK整体划分为两部分:宿主和插件.宿主只向开发者提供必要的服务接口,并提供了自定义插件加载器.而核心的逻辑则是存在于插件中.当需要采集数据的时候,只需要由开发人员开发好数据采集插件并下发到指定设备即可;当需要修复SDK缺陷时,同样也只需要下发新的插件包即可。 通过将整个工程分为宿主和插件可以实现宿主的并行开发和分开编译,并且能有效<typo id="typo-2003" data-origin="的" ignoretag="true">的</typo>解决方法数65535的限制。
SDK初始化
Context
很多情况下SDK没有自身的上下文Context,而必须要借助应用提供.SDK初始化的常见做法:
Ad.init(Context context,AdParams params) Application组件中的onCreate()中去掉用该方法,这就意味着该初始化过程是同步的, 假如SDK本身初始化时间较长,就会影响应用的启动速度 通常将SDK服务进一步划分成核心服务和辅助服务,之后通过并行初始化和延迟初始化的手段来减少SDK初始化耗时。
封装一个简单的SDK基本思路
思路如下:
1.打开Android studio 新建一个项目,类型指定为库
2.建立一个activity.在配置文件中声明一下.
3.导出该项目,导入为jar.
4.导入到你指定的另外一个项目中.
5.在配置文件中声明jar包中activity
6.这个时候就可也是使用这个库了

以上就是Android开发中的SDK封装的解析了,简单说明了一些SDK的封装步骤思路。供大家学习更多Android开发进阶技术可以参考《Android核心技术电子笔记》;学无止境,想要在Android岗中深造必须不断进阶自己,如今的时代人人都把自己往死里卷。我们不学习就会被行业淘汰。
总结
注意事项:
1.所有的内容都需要依赖这个acitivity.他是sdk上下文.
2.Sdk的所有内容围绕着这个activity来写就行了
3.把这个activity当成一个普通类使用
4.Sdk最大的问题就是它里面的所有内容都是没有生命周期的.
5.只有之前创建声明过的那个activity 有生命周期.原理大概是这样的,其他的自己查资料。
网友评论