支付宝 App架构的原理与实战

最上层是原生的 HTML5 代码,这块就是大家常见的 Web 开发环境,包括 HTML、CSS、JavaScript等。

下面一层即离线包管理,这个我们在第二章节内进行详细介绍。

再往下是 HTML5 容器层,HTML5 容器作为中间层,将浏览器和支付宝底层框架有机结合起来,同时还提供各种生命周期机制、事件机制、扩展插件等内容。

在 HTML5 容器里面有个非常重要的概念: JSBridge。通过 JSBridge,HTML5 容器将支付宝框架底层以及中间件层提供的各种能力和 HTML5 前端代码进行联通,其中包括 RPC(远程过程调用,用来实现 App 和服务器通信)、支付、扫一扫等。

最下面是支付宝底层框架,提供微应用,微服务等概念。一个 HTML5 应用,也会被框架模拟成一个微应用,通过应用 ID 进行解耦。

1.2.1 JSBridge 介绍

JSBridge 是 HTML5 容器的基石,桥接了 JS 环境与 Native,实现了 Native 代码和浏览器环境的双向通信,Native 代码可以通过调用浏览器提供的接口运行JS,从而实现调用 JS 函数、传递参数到 JS 环境等;而浏览器到JS环境的通信是通过 Native 拦截浏览器的请求来实现,请求可以是网络请求或者是一些内部函数的调用。

1.2.2 H5 容器定制化扩展

HTML5 容器提供了 2 种扩展方式:

  • JSAPI

JSAPI 方式给 HTML5 页面增加了 Native 功能调用接口,通过实现自定义 JSAPI 类中的 Handler 方式,可以以 Native 的形式实现特定功能,例如调用 Native 加密函数。

  • 事件

HTML5 容器在状态变化时会发送事件,通过监听 HTML5 容器特定事件,可以实现对 HTML5 容器生命周期的处理,比如修改加载进度条颜色、修改页面导航栏等。事件提供了更强的定制性,完全可以满足对 HTML5 容器的各种自定义需求

1.3 容器稳定性

上面在研发难度中,我们提及到了,HTML5 方式的研发难度是最高的,因为需要定制化内核进行性能及稳定性优化。目前支付宝采用的是阿里集团的 UC 自研内核,并针对支付宝的 HTML5 容器进行了深度优化和定制。如图所示,UC 内核和系统内核的卡顿卡死率的数据对比效果非常显著,我们可以直观地看到 Webview 稳定性的提升。

离线包机制+发布平台,满足业务即时更新


目前支付宝业务的另外一个特点就是需要快速迭代,变化的政策、突发事件都需要我们可以快速把新的业务需求触达给用户。但是对于 App 开发者有一个不容忽视的问题,就是应用商店审核。由于审核的存在,App 上开发的业务会有一个统一排期,比如说月底会有新版本,那么所有的业务进度都得考虑 App 的排期计划。

2.1 离线包机制

为了做到良好的用户体验,我们在容器中引入了离线包机制。通过离线包机制,我们将原有从线上加载的 HTML5 应用,提前下发到本地,通过读取 IO,或者是内存,进行页面的渲染,达到接近原生的用户体验。

通过发布平台,我们可以将不同的 HTML5 离线包,以单独应用的形式,进行不同维度的下发,使原来 all in 的 Native 发布模式,改为各业务线自行定制发布计划,自行制定发布标准,自行发布的并行发布形式,来满足业务的快速迭代。

2.1.1 加载机制

通过内存提前加载,定时更新,启动预加载内存等手段,我们将一个业务包需要用到的资源加载到内存,从而使启动过程尽量无感知,页面秒开无白屏。同时,我们还有 Fallback 手段,保证在包损坏或者是未下载完成时,可以通过在线页面的形式,保证业务的 100% 可用性。

2.1.2 公共资源包机制

所谓公共资源包,即所有 HTML5 离线包都可能会用到的公共资源的集合。公共资源包解决多个 HTML5 应用使用同一资源产生的冗余问题。如 React 应用使用 ReactJS 框架代码。您可以将公共资源放入全局资源包,以降低 HTML5 应用体积。

通过公共资源包机制,可有效降低各 HTML5 应用的包体积,从而使更新率提高,页面开启速度加快。

2.2 发布平台

为了满足快速迭代的需求,一个强大的发布平台也是必不可少的。发布平台的核心指标,就是将发布内容高效、精准的投放到指定的设备上,为了实现这个目标,我们做了如下的努力。

2.2.1 离线包大小管控及差量包机制

HTML5 容器离线包提供了更新机制,以单个离线包作为更新维度。因为单个离线包业务很简单,所以离线包的大小是可控的,通常小于 500KB。我们通过大量的实践,总结出来“500KB”这个值,既可以满足单个业务的内容,也可以更高效地发布到设备上。500KB,在 4G 的时代,几乎可以做到用户无感知更新,即便是 2G/3G 也可以保证一个高的到达率。

上面说的是一个 HTML5 应用的大小。实际上,我们更新的包会更小,发布平台会通过 diff 算法,计算出相同 HTML5 应用两个不同的版本的差量包,差量包通常也就在几 KB 至几十 KB 不等,可以做到更高的下载成功率,下载成功率一定程度就意味着实际到达率。

2.2.2 Fallback 机制

在一些极端网络场景下,新的业务资源包更新失败,而我们又期望用户使用的是最新的业务,这个时候 Fallback 访问机制就会发挥作用。每个离线包资源都会在发布服平台上存放一份,在刚刚说到的极端场景下,用户会访问服务器的 Fallback 地址获取资源,从而保障页面可用。

2.2.3 多维发布

另外,针对刚开发好的应用,我们可以通过发布平台的灰度发布进行发放,通过外部灰度的形式,对业务指标进行验证,达到标准后,方可正式发布,做到可灰度,可回滚。

更优越的 Hybrid 方案:小程序差异化解析


作为超级 App,一个最主要的特征就是开放。开放就是共享 App 的流量,让外部伙伴的业务可以通过支付宝触达用户,这就面临一个质量管控的问题。支付宝需要保证这些业务是合法合规的,保障用户的财产安全。

3.1 离线包 VS 小程序

如果开发一方业务,离线包肯定是非常好的选择。不过,要是开放给第三方合作伙伴构建生态的话,纯 HTML5 页面就有一些劣势。

上图是 HTML5 离线包和小程序的细节对比。总结来说,对于开放给第三方的生态,从应用体验来讲,小程序更加统一,质量有保障;从应用安全角度来讲,小程序是访问我方发布服务器,不会直接访问第三方链接,安全可控;从研发门槛上来说,小程序是更简单的前端开发方式,同时也提供了非常丰富的组件。

3.2 小程序解析

小程序其实和离线包本质是类似的,都是一种 Hybrid 应用,但小程序是基于一个定制的 DSL 语言,不是前端的标准,但是类似。在 DSL 规则下业务进行小程序的开发,不支持直接操作 DOM,这种 DSL 规则下的自由可以有效的进行质量管控。

小程序作为一个应用,他拥有完整的生命周期。从开发到关闭,开发者都可以感受到,这点也是 HTML5 所不具备的。另外,每个小程序之间从运行时和持久化上,都是完全隔离的,而且小程序运行在特定进程中,所以和支付宝也是隔离开的。

在渲染性能上,小程序采用双线程模式将页面渲染和业务逻辑分别放在两个单独的线程中,renderer 运行在 WebView 中,负责渲染界面;小程序业务逻辑运行在单独的 worker 线程,负责事件处理、API 调用和生命周期管理。两个线程之间通过 postMessage 以及 onMessage 进行数据交换,数据可以从 worker 线程传递到 render 重新渲染界面,同时  renderer 也可以将事件传递给对应的 worker 处理。一个 worker 可以对应多个 renderer,方便页面间数据共享和交互。

在资源加载方面,小程序采用离线化方式加载,也就是说当打开小程序时,小程序离线包必须下载到本地,由于每个版本只下载一次,一方面节省了每次请求的资源开销,另一方面启动速度大大提升了。当有新的版本时,发布平台自动比对本地安装的版本和最新版本产生并下发差量包,客户端不需要下载整个包即可更新小程序至最新版。

3.3 构建生态

通过引入相同的小程序架构,使得小程序,可以作为生态进行多端互投。在支付宝中投放的小程序,可以只经过一些开放接口的适配,即可跑在基于相同小程序架构的 App 中。未来,开发者或第三方服务更多是面向小程序来开发,而 App 则是提供一个统一的架构,真正做到开放生态,用完即走的理念。

关于支付宝自研 HTML5 容器方案


mPaaS 离线包源自于支付宝原生方案,经历了严苛的业务考验,让你直接和支付宝使用同一套框架层代码,拥有统一容器及内核,相对系统内核获取更低 Crash 率和 ANR 率,适配性强,并具备良好的、弹性的扩展能力,结合具体业务需求定制 JSAPI。

它可以帮助减少 App 白屏、解决 Hybrid App 跨平台兼容与适配,提升 App 性能并大幅优化原生开发下的包大小。

目前 mPaaS 离线包 Demo 源码已更新在 GitHub 上,欢迎 Star:

https://github.com/alipay/mpaas-demo

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。


[外链图片转存中…(img-qCvrqWJy-1711991108900)]

[外链图片转存中…(img-HaVqxNDe-1711991108900)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android应用程序开发入门是学习如何使用Android操作系统和开发工具创建应用程序的过程。项目实战是将所学知识应用于实际项目中,以实现特定的功能和目标。通过学习Android应用程序开发入门和项目实战,您可以掌握如何创建高质量的Android应用程序,并为您的职业生涯打下坚实的基础。 ### 回答2: 随着智能手机的普及和移动互联网的发展,Android操作系统成为了手机操作系统的霸主。而随之而来的是在Android平台上的应用程序繁荣发展。为了适应这一趋势,许多人都纷纷学习和开发Android应用程序。本文将从基础入手,分享一下自己对于Android app开发入门与项目实战的经验。 一、Android入门基础 1.1 安装Android Studio Android Studio是一个由Google推出的完整集成开发环境(IDE),供开发者建立Android应用程序。在建立Android开发环境之前,需要先去官网下载并安装Java SDK和Android Studio开发环境。 1.2 学习Java编程 Java是Android应用程序的核心编程语言。如果之前没有Java编程经验,那么需要先从Java的基础语法和面向对象编程(OOP)基础开始学习。 1.3 学习Android应用架构 Android应用程序采用MVC、MVP、MVVM等模式,这些模式都有其自己的优缺点。在开发Android应用程序之前,需要了解这些模式之间的区别和比较,自己根据应用场景选择合适的应用程序架构。 1.4 理解Android组件之间的交互 Android应用程序采用组件化的架构,不同的组件之间通过Intent和广播来实现数据和事件的传递。在编写Android应用程序之前,需要理解Activity、Service、BroadcastReceiver等组件之间的交互。 二、Android应用程序开发项目实战 2.1 了解Android应用程序开发项目的流程 从需求分析到应用程序发布,应用程序开发都需要各种环节、各种工具和技能来执行。了解这些应用程序开发流程,能够更加顺利地开发Android应用程序。 2.2 开发Android应用程序界面 Android应用程序的主要部分是界面,因此Android应用程序的界面设计十分重要。Android应用程序界面开发需要设计好自定义控件,采用不同的布局和各种皮肤和风格。 2.3 开发Android应用程序逻辑 Android应用程序逻辑包括了UI与数据之间的交互,数据的更新与处理,网络和IO的操作,多线程的使用等。Android应用程序的逻辑处理,必须严谨、细致。 2.4 Android应用程序调试 Android应用程序的调试是非常重要的,它可以快速改正错误,并且保证应用程序的性能。通过使用Android Studio、logcat等调试工具,开发人员能够快速的跟踪应用程序运行过程中出现的问题。 Android app开发入门与项目实战需要开发人员具备扎实的Java基础和Android编程基础。掌握Android架构、组件之间的交互、界面和逻辑开发和调试等技能,才能在Android平台开发出符合要求的高质量应用程序。同时,开发者还可以通过查阅相关技术资料,参加Android学习班、实践等方式,不断地提升自身的技能水平。 ### 回答3: 随着移动智能设备的逐渐普及,人们越来越重视移动应用程序的开发和运用。目前,Android操作系统在全球市场占据优势地位,也成为了广大开发者的首选平台之一。因此,学习 Android app 的开发和实战,具有非常重要的现实意义和市场价值。 一、 开发入门 1. 编程语言:Java是Android app 的主流编程语言,因此学习Java是入门的前提。 2. 开发工具:Android Studio是官方推荐的集成开发环境,它具有丰富的功能和易用性,是Android app 开发的主要开发工具。 3. 开发框架:Android app 的开发离不开开发框架,常用的开发框架有ButterKnife、Glide、Retrofit等,它们可以极大地提高开发效率和代码质量。 二、 项目实战 1. 构建项目:在Android Studio中创建新项目,选择适合自己的项目模板。其中包括了评级、价格、分类等元素。 2. 设计界面:利用界面编辑器创建应用UI界面,这里主要有线性布局、相对布局和约束布局等,根据实际情况选择。 3. 添加组件:添加各种页面元素,例如文本框、按钮、图片等等。 4. 实现功能:在Java代码中实现各种功能,例如响应用户输入的事件,数据网络请求,并对数据进行处理等等。 5. 调试项目:在Android Studio中进行真机测试和模拟测试,检查程序运行状态和效果。 6. 发布应用:实现应用的打包、签名和发布,将应用提交到应用市场等平台。 总之,学习Android app 开发需要掌握Java编程语言、Android开发工具、Android开发框架、UI设计、功能实现和调试等技能,还需要进行实战项目的锻炼,从而获得更多的开发经验和技巧。只有不断地学习和实践,才能够成为一名优秀的Android app 开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值