极客星球 | Android SDK 架构设计之路
编者按:7 月 15 日晚,由 MobTech 袤博科技主办的一档线上技术直播分享栏目【Coder Park】第一季第二讲《移动端新风向》顺利在云端举行,客户端负责人文军分享了 MobTech 袤博科技 Android SDK 架构设计之路,从 0 到 1 开发及迭代过程中遇到的一系列难题,共同探讨其解决思路和 SDK 开发架构升级。
以下为分享内容:
MobTech 袤博科技开发者服务历时 9 年,现已覆盖全球近 155 亿+移动端设备,业务覆盖营销、金融、商业地理等多个垂直行业,同时为政府业务提供支持。对于 App 开发者来说,会经常面临架构选型以及 SDK 接入的一些痛点和问题,今天从“SDK 架构设计”这个主题出发,分享 MobTech 袤博科技如何系统化打造 SDK 服务。
▌浅谈 SDK
SDK 是软件开发工具包的缩写,它的主要作用主要包括以下方面。一是提供软件必备功能,二是降低软件开发和维护成本,三是极大缩短软件开发周期,四是当今移动互联网起飞的 X 因素,可以说没有 SDK 移动互联网不会发展这么迅速。
SDK 服务包含以下方面:一是提供 SDK 基础业务功能,如授权分享、推送、一键登录等;二是提供完善 SDK 的集成工具和文档,方便开发快速接入;三是需要提供三方开放平台支持,除了对 Android 和 iOS 原生 App 开发支持外,还需要提供像 Unity、Cocos、Uniapp、Flutter、APICloud 等平台支持;四是需要提供 7x24 小时的在线服务,保证能及时响应开发者的各种问题。
▌Mob SDK 架构
那么在解读 MobSDK 架构前,我们先来全面了解一下 MobSDK。想必很多开发者了解我们,都是从 ShareSDK 开始,我们自 2012 年起,通过这款产品打开了移动开发者的市场,在 ShareSDK 引领市场的同时,我们陆续开发了 MobPush、一键登录、短信验证码、MobLink 等系列产品。MobPush 这款产品自上线以来,通过了 3 年时间的不断优化和升级,目前在全方位推送功能和推送指标上都达到行业第一梯队水平,并且完全免费。秒验 SDK 则提供了当下比较流行的一键登录功能,上线 3 年多,物美价廉且得到多方好评。目前产品推出 9 周年感恩回馈活动,为新老用户带来了超多优惠福利,感兴趣可以点击“阅读原文”了解。
MobSDK 的整体架构按功能支持分为三部分,第一部分是 SDK 基础功能,第二部分是集成工具支持,第三部分是三方开放平台支持,每一部分和模块都是支持横向扩展的。
第一部分 SDK 基础功能架构可分为三层,第一层是 SDK 业务层,第二层是通用功能层,第三层是基础工具集合层。SDK 业务层将各业务之间互相独立开,这样每个功能 SDK 之间是相互独立的,方便迭代和维护。通用功能层会将一些通用的功能从各 SDK 中抽离出来,单独为一个模块。基础工具集合层提供了基础工具框架,是经过长期积累的,稳定性较强,也独立出了新的模块。
第二部分是集成工具,这一块也是尤为重要。首先要让开发者接入进来,那么就需要提供更加快捷接入方式,除了传统集成文档之外,我们提供了 0 代码集成工具,像 gradle 插件、cocoapods、maven 仓库、三方开放平台组件(如 Flutter 组件、APICloud 组件、UnityPackage 等)。
第三部分是三方开发平台支持,针对 Unity、Cocos、Uniapp、Flutter、APICloud 等平台,我们提供了开源的桥接代码和组件支持,方便所有移动开发者都能接入 SDK。
▌从 0 到 1 开发
一般从 0 设计一款 SDK,总体上可以分为 5 个步骤:基础架构的设计、开放 API 接口设计、业务功能框架设计与开发、基础核心库设计与开发、打包与发布。
第一步是基础架构设计,一个好的架构可主要从可读性、可扩展性、可维护性三个方面进行考虑,即功能模块间相互独立,降低耦合度,保证结构清晰易于维护。通常我们可以把 SDK 架构简单分为两个层次:业务层和通用功能层。业务层可以独立成业务模块,包括开放 API 接口和业务功能实现,能用功能层可以分为两个模块,包手通用功能模块和基础工具模块。
第二步是开放 API 接口设计,是直接开放给开发者调用的,所以经常要转化角色。针对如何调用这个接口,如何用起来更方便快捷,并且不用去考虑任何场景和问题,总结了以下几个要点。
1.API 接口命名需要规范,且通俗易懂;
2.接口输入参数尽量少,如有必要参数,需要做好参数校验;
3.接口尽量保证是非阻塞的,这样不影响开发者正常业务逻辑处理;
4.接口调用日志需要清晰明了,便于调试;
5.接口结果最好是直接返回,尽量少的使用回调,如有必要,可以在回调方法命名上明确回调所在线程,如在主线程回调,可以使用 onResultInMainThread 这种方式来命名回调方法。另外使用回调时需要考虑内存泄漏问题,由于开发者有可能是使用匿名内部类的方式进行回调传参,这时如果调用程序的生命周期结束时回调还没有回来,就需要主动移除回调,防止内存泄漏,所以使用回调时还需要提供移除回调的方法。
第三步是业务功能框架设计,不要过度设计,根据具体的业务需求来设计即可,不要为了一些未来很小概率发生的需求变化提前设计。
第四步是基础核心库设计与开发,在核心库提炼过程中需要保证功能间互相独立,降低耦合度。
最后是打包与发布,可以通过 jenkins 自动获取代码和执行编译打包,最终发布到 maven 上,可以大大降低人为本地打包出错的风险。
▌SDK 主要问题及解决途径
SDK 开发主要面临以下问题:SDK 包体大小、兼容适配、四方依赖问题、隐私合规问题。
对于 SDK 包体大小,首先是代码一定要精简,不过度设计,代码撰写需尽量最优雅最简洁的,其次混淆,理论上除了四大组件以及开放 API 接口外,其它的都需要进行混淆。兼容适配主要有 4 个层面的兼容问题:系统版本兼容、厂商兼容、屏幕兼容、以及新老版本兼容。系统版本兼容我们需要适配 android 4.0 以上的所有版本,一般官方每年 Q3 会发布一个新的版本,在新系统正式发布前我们需要做好适配,一般我们会在 Q1-Q2 研究并完成新系统的适配,做法先是先整体研究新系统的变更,并圈出与 SDK 相关的重点变更,最后根据官方指南,进行相关适配修改与测试;厂商兼容,这块主要通过机型兼容覆盖测试来进行功能适配,一般会覆盖 5 大厂商的主流机型;屏幕兼容,主要中涉及界面相关的适配和测试;新老版本兼容,需要确保所有 SDK 版本都是向下兼容的,保证 SDK 发新版本后,开发者可以不用修改一行代码就能直接更新到新版本 SDK。
四方依赖指的是依赖的开源框架(如 supportv4 包、OkHttp 等)、开放平台(如 QQ 分享、微信分享)、开发平台(如 Flutter、Unity、Cocos 等)。首先需要去开源依赖,不依赖任何三方工具包,完全基于原生的 android.jar 进行开发。对于依赖的四方开放平台和支持的开发平台,我们需要进行更新监控,以及定期更新,保证提供的基础功能能正常运行。隐私合规主要关注官方隐私调整、应用市场隐私政策、以及国家网络信息安全政策。通常我们可以走第三方安全检测机构进行权威检测,以及相关适配修改。
针对隐私合规这块,MobSDK 主要有三方面:一是隐私政策声明,MobTech 袤博科技针对 SDK 业务功能,出具了相应的隐私政策,确保 SDK 功能在合法合规的场景下使用。(对隐私适配这块也设计了隐私控制 API,在用户未提交隐私授权前,是不会做任何网络请求和 API 调用的,同意授权后,才会初始化相关 SDK 功能);二是定期向第三方检查机构送检,三方检查机构会按照国家最新相关规定和政策进行权威的安全检查,并输出检测报告,当前我们通过了梆梆安全和爱加密等安全机构的检测;三是我们出具了完整的合规与安全指南,根据指南可以解决隐私合规相关的问题。
官网链接:https://www.mob.com/
版权声明: 本文为 InfoQ 作者【MobTech袤博科技】的原创文章。
原文链接:【http://xie.infoq.cn/article/0dc950c0096482e6f9b5943c9】。文章转载请联系作者。
评论