共计 3552 个字符,预计需要花费 9 分钟才能阅读完成。
作者:周松 (北傲)
现在 app 冗余与包大小始终都是很多业务挥之不去的优化项。行业内很多极简包如雨后春笋般冒出来。又或者是很多业务对极简包的摸索也有踊跃的尝试。
极简包带来的价值,不仅是包大小上的量变,更是用户下载转化率和投放带来的正向效应,线下下沉市场的开拓具备重要价值,对拉新转化率影响很大。
个别极简包会有两种计划:
1、作为一个套壳 App,套了一层 H5。次要链路由前端去买通交易流程,而后通过更新计划疏导用户降级;
2、作为一个套壳 App,套了一层 H5。次要链路由前端去买通交易流程,而后通过插件化的模式去动静更新 Native 版本的 app。
无论采纳上述哪种形式,作为 H5 的载体,只应用原生的 web 去关上页面体验感仍不是很好。同时还会伴有各种 H5 的适配联调和优化。而对于 H5 比拟宏大的业务,如手淘,很多页面前端去适配有极大的工作量,投入产出比不高。
故手淘极简包提供第三种计划:
3、主页由多个 TAB 实现,能够 Native 或者 H5,由业务本人去抉择,详情页通过 H5 去加载。前期降级链路是传统 Apk 更新或者插件化由业务方本人去抉择。
由此手淘极简包我的项目拆散了一个能够疾速搭建极简 App 的框架。可供作为根底脚手架,疾速搭建出本人业务的极简版 App。
MTAS
Mini TaoBao Application Scaffold
MTAS 是手淘极简版利用脚手架,是基于疾速搭建极简包我的项目的 App 框架。
现在手机淘宝极简版采纳此极简包根底框架,包大小 4M+。
基础架构思维导图
极简根底框架从构造上次要分为几个局部:
极简根底服务
极简根底库 — 次要集成团体的根底依赖,比方:网络、容器、登录等。都是通过裁剪或重构过的精简版,相较于原版冗余简单性能多,精简版的根底依赖轻量简略性能少。只有须要的根底性能,不去额定减少包大小的累赘。
对立 api 层 — 要想疾速搭建一个轻量的 app,根底的性能封装不能少,在这个模块中,对立实现罕用的性能,若是业务接入,不须要反复造轮子。只须要简略调用即可。
极简外围容器
极简外围容器由 mini- 网页容器 sdk 作为载体,外围实现极简版的相干对立拦挡导航。反对登录、back、跳转、外链拉起、降级等性能。启用多 webview 计划代替原生 webview 的缓存后退后退等策略,使页面过渡更加晦涩。进入前后级更加疾速,交互更好。内置缓存冷启及首次启动达到秒开级别,晋升用户体验。
极简降级链路
能够同时反对插件化下载、装置、切换。也能够反对传统的利用 apk 下载、装置、降级。通过流式调用管制下载相干的操作,调用方能够自定义下载流来做本人想做的事件,例如一些流前查看,流后处理,开关管制等等。
极简业务组件
搭建一个简版首页的根底视图组件、罕用的下拉刷新、上拉加载组件、裁剪过的 recyclerView 等等组件,能够反对搭建简略的首页。
具体设计
极简包根底框架自下而上,从根底依赖到下层业务,一层层做解耦和拆散。
业务能够调用根底性能,也能够自行扩大性能。比拟灵便。
极简包定义一套轻量化计划,外围解决以下三类问题:
- 包大小:通过轻量根底服务,以及 Native + H5 业务状态缩减包体大小至 4M+;
- 降级转化:插件化底座实现静默更新,插件静默更新 + 兜底 APK 更新 + 利用市场自动更新,整体晋升降级率;
端内体验:
- Native 化外围页面、H5 预渲染、H5 详情极速版晋升外围链路加载体验
- 登录,保障包体大小前提下,反对支付宝登录、手机号一键登录 & 验证码登录、首页强疏导。
极简版架构设计
极简根底服务
极简根底库
次要集成团体的根底依赖。都是通过裁剪或重构过的精简版,相较于原版冗余简单性能多,精简版的根底依赖轻量简略性能少。只有须要的根底性能,不去额定减少包大小的累赘。
以下介绍几个次要的裁剪根底库:
网页容器 sdk 裁剪比照图
mini- 网页容器 sdk,是一个可扩大的 Hybrid 利用解决方案,为客户端内的 Web 页面提供了弱小、易用的 WebView 容器。轻量且易用,目前只有 500kb,不依赖 UC 内核,做到小而简。
图片库 sdk 裁剪比照图
mini- 图片库 sdk,精简无线图片库 sdk 是阿里巴巴 Android 端集图像加载、显示、解决、监控于一体的一站式解决方案。笼罩业内支流图片库外围个性,同时就地取材联合团体 CDN 图片解决规定,旨在更无效地节俭流量、更优越的内存占用、更极致的性能优化、更晦涩的加载体验。简化线程调度框架,缩小图片格式反对,轻量图片降级计划,保留根底性能,对模块合并,代码优化,膨胀一些负责性能。
网关 sdk 裁剪比照图
mini- 网关 sdk,精简 API 网关平台,为客户端、H5 和服务端提供对立、快捷、牢靠的 API 接入以及监控报表服务。保留平安框架的能力,保障挪动平台利用完整性、利用执行环境可信性、数据机密性。原生网络库减小包大小。提供 plugin 供前端调用。
mini- 数据采集 sdk,一套面向客户端开发的目前团体内笼罩 app 最多的数据采集 SDK,具备数据安全级别高、数据达到率高、传输流量小等特点。优化代码做裁剪,去网络底层 sdk 依赖。
mini- 登录 sdk,对立登录 SDK 为淘系 APP 打造统一的账户体验,并且与平安深度集成,提供统一的平安水位。
代码裁剪,突出一键登录及 sso 登录,进步登录效率。缩减链路长的登录。
极简包依赖大小比照图
极简包根底依赖裁剪过后,正向收益是非常显著的,无效的升高了包大小,去除不必要的依赖和性能。使利用达到轻量化和简洁化。负向影响也能够意料,性能多样性升高,可供的抉择缩小。
对立 api 层
极简包根底框架中做了一套对立根底实现。集成罕用的工具类,对性能的应用也做了封装。
根底实现包类展现
每个包的划分使职责明确。应用方能够间接用外面的各种办法。也能够本人自定义须要的性能,或者实现接口扩大想要的能力。
极简外围容器
容器外围承接了业务的根底性能,保障失常的 H5 流程及平安相干的反对。同时也能够自定义实现业务方本人的扩大。
拦挡导航
路由拦挡导航次要分为两个局部:替换器(Replace)和拦截器(Filter)。拦截器次要负责拦挡并且做一些安全性的校验以及解决;替换器次要解决业务上通用的性能,不便调试测试的性能等等。
多 WebView 计划
为晋升用户体验,极简包采纳多 WebView 计划,对 h5 页面的后退、后退进行了优化,即在后退时关上一个新 WebView 进行页面加载,回退时能够立即暗藏 WebView 实现秒退。
多 WebView 设计
极简降级链路
极简框架中的下载链路,能够依据策略模式自行抉择,依据前置条件的调配和设置,业务层主导如何执行策略。目前降级链路内置 Apk 更新和插件更新,使用者也能够自定义流水线去包装成另一个策略实现更新。
插件包或者主线 Apk 包公布能够在与极简包解耦,相互的公布不受影响,不相互阻塞,能够提前测试,线上提前部署。
降级链路
利用降级
极简下载更新流程的架构形式次要通过流式调用来做阶段化推动。其中利用降级的流如下:
利用降级流水线
这个整个流水线也能够本人去定义。
插件降级
在插件化下载更新架构中,线上插件编译好之后,端上通过下载、装置、加载来做到切换到主包。
同时涵盖平安模式,如果插件包有异样,能够通过平安模式回滚至原来的极简包。
插件降级流水线 & 链路
平安模式
区别与传统的 Apk 降级,插件化降级的形式更加灵便、便捷、可配置。然而插件化也可能会遇到一些机型和新零碎兼容性、稳定性的挑战。这时候极简根底框架就有一个平安模式作为无力的保障,在遇到一些不可意料的场景,屡次谬误的状况,这个后盾就能够作为兜底,在谬误态的状况下还原或还原利用的失常应用态。
平安模式提供根底的平安校验,在载入插件之前,测验插件是否非法、是否平安、文件是否损坏等等,后行判断。也能够通过策略配置,去动静的管制是否须要加载插件。在保障体系中,最外围的就是回滚机制,当插件加载之后,正在运行,呈现了一些解体等影响用户应用的案例,间断解体等重大错误行为重大影响用户的应用,这时候,回滚机制就会判断出呈现了问题,就会回滚至极简包,而不加载插件内容,保障用户的应用和体验。
插件降级通过在 wifi 状况下的静默更新服务对用户做疏导降级,疾速切换降级至全量业务。
插件降级对于极简包降级至主包,降级率的进步,各种下单、登录老本的升高等等的业务价值很高。
思考与将来
极简包在疾速获取新增用户下面的体验劣势微小,装置速度极快,根底链路保障,能够让用户体验到 APP 性能。架构上整包能够配置更新,版本迭代笼罩节奏可控。能够通过插件疾速部署各种新包、测试包、A/ B 试验包来满足各种需要。
久远来看,技术上能够通过插件化动静编译技术,业务和性能能够通过 hook 实现主动插桩埋点、代码块或者业务块依据优先级分包下载和加载等等。
关注【阿里巴巴挪动技术】微信公众号,每周 3 篇挪动技术实际 & 干货给你思考!