极客星球 | 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功能);二是定期向第三方检查机构送检,三方检查机构会按照国家最新相关规定和政策进行权威的安全检查,并输出检测报告,当前我们通过了梆梆安全和爱加密等安全机构的检测;三是我们出具了完整的合规与安全指南,根据指南可以解决隐私合规相关的问题。

关于我们

MobTech袤博科技作为运用大数据技术帮助企业拥抱数字时代的强力助推器,运用卓越的创新力和领先的大数据技术,帮助企业将数据转化为营销运营的洞察力。

未来,MobTechch袤博科技将积极探索大数据深度应用及发展,以客户需求为导向,贴合更多应用场景探寻市场未知的可能性,为全行业用户构建和谐完善的数据智能生态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent.ACTION.CALL的使用 5.3 自制发送短信程序——SmsManager与PendingIntent对象 5.4 自制发送Email程序——Intent在Email上的使用 5.5 自制日历手机数据库——实现SQLiteOpenHelper 5.6 手机震动的节奏——Vibrator对象及周期运用 5.7 图文可视化提醒——Toast与LinearLayoutView 5.8 状态栏的图标与文字提醒——NotificationManager与Notification对象的应用 5.9 搜索手机通讯录自动完成——使用ContentResolver 5.10 取得联系人资料——Provider.Contact的使用 5.11 制作有图标的文件资源管理器——自定义Adapter对象 5.12 还原手机默认桌面——重写clearWallpaper方法 5.13 置换手机背景图——Gallery与setWallpaper整合实现 5.14 撷取手机现存桌面——getWallpaper与setImageDrawable 5.15 文件资源管理器再进化——JavaI/O修改文件名及删除 5.16 取得目前File与Cache的路径——getCacheDir与getFilesDir 5.17 打开/关闭WiFi服务——WifiManager状态判断 5.18 取得SIM卡内的信息——TelephonyManager的应用 5.19 调用拨号按钮——打电话CALL_BUTTON 5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理 5.24 取得电信网络与手机相关信息——TelephonyManager与android.provider.Settings.System的应用 第6章 手机自动服务纪实 6.1 您有一条短信popup提醒——常驻BroadcastReceiver的应用 6.2 手机电池计量还剩多少——使用BroadcastReceiver捕捉Intent.ACTION_BATTERY_CHANGED 6.3 群发拜年短信给联系人——ACTION_PICK与Uri对象 6.4 开始与停止系统服务——Service与Runnable整合并用 6.5 通过短信发送email通知——BroadcastReceiver与Intent整合 6.6 手机拨接状态——PhoneStateListener之onCallStateChanged 6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定时间置换桌面背景——多AlarmManager事件处理 6.14 判断发送短信后的状态——BroadcastReceiver聆听PendingIntent 6.15 后台服务送出广播信息——sendBroadcast与BroadcastReceiver 6.16 开机程序设计——receiver与intent-filter协同作业 6.17 双向短信常驻服务——Service与receiver实例 第7章 娱乐多媒体 7.1 访问Drawable资源的宽高——ContextMenu与Bitmap的应用 7.2 绘制几何图形——使用android.graphics类 7.3 手机屏幕保护程序——FadeIn/FadeOut特效与运行线程 7.4 用手指移动画面里的照片——onTouchEvent事件判断 7.5 加载存储卡的Gallery相簿——FileArrayList 7.6 取得手机内置媒体里的图文件——ACTION_GET_CONTENT取回InputStream 7.7 相片导航向导与设置背景桌面——ImageSwitcher与Gallery 7.8 调整音量大小声——AudioManager控制音量 7.9 播放mp3资源文件——raw文件夹与MediaPlayer的使用 7.10 播放存储卡里的mp3音乐——MediaPlayer.setDataSource 7.11 自制录音/播放录音程序——MediaRecorder与AudioEncoder 7.12 通过收到短信开始秘密录音——MediaRecorder与BroadcastReceiver实例 7.13 内置影片播放器载入3gp电影——VideoViewWidget 7.14 自制3gp影片播放器——MediaPlayer与实现SurfaceView 7.15 相机预览及拍照临时文件——Camera及PictureCallback事件 第8章 当Android与Internet接轨 8.1 HTTPGET/POST传递参数——HTTP连接示范 8.2 在程序里浏览网页——WebView.loadUrl 8.3 嵌入HTML标记的程序——WebView.loadData 8.4 设计前往打开网页功能——Intent与Uri.parse 8.5 将网络图像网址放入Gallery中显示——URL.URLConnection.BaseAdapter 8.6 即时访问网络图文件展示——HttpURLConnection 8.7 手机气象局,实时卫星云图——HttpURLConnection与URLConnection和运行线程 8.8 通过网络播放MP3——Runnable存储FileOutputStream技巧 8.9 设置远程下载音乐为手机铃声——RingtoneManager与铃声存放路径 8.10 远程下载桌面背景图案——URLConnection与setWallpaper()搭配 8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的应用 8.15 手机下载看3gp影片——Runnable混搭SurfaceView 8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与MapView实时更新 9.6 移动版GoogleMap——Geocoder反查Address对象 9.7 规划导航路径——DirectionsRoute 9.8 移动设备上的Picasa相册——GooglePicasaAPI 9.9 随身翻译机——GoogleTranslateAPI 第10章 创意Android程序设计 10.1 手机手电筒——PowerManager控制WakeLock并改变手机亮度 10.2 GPS轨迹记录器——利用LocationListener在地图上画图并换算距离 10.3 女性贴身看护——AlarmManager.DatePicker.TimePicker 10.4 手机QRCode二维条形码生成器——Canvas与SurfaceHolder绘图 10.5 AndroidQRCode二维条形码扫描仪——BitmapFactory.decodeByteArray 10.6 上班族今天中午要吃什么——热量骰子地图 10.7 掷杯筊——把手机放在空中甩事件处理...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MobTech袤博科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值