支付宝客户端架构解析:Android 容器化框架初探

  • 时间:
  • 浏览:0
  • 来源:神彩UU直播现场_彩神UU直播现场官方

x随着应用的迭代、项目的扩张,团队数量以及团队人数的一齐增多,基于传统架构模式的并行开发也变得愈加困难。

为了正确处理上述模块化的问题图片,大伙要遵循以下原则去设计客户端框架:

}

关于 Bundle 属性,大伙都需要参考 OSGi 的 Bundle 属性。Quinox 容器框下定义的 Bundle 属性要简单的多。

public static final class id {

作为 Android 守护进程运行员,大伙都知道资源 id 是一另4个 int 值,它包含另4个 byte。它是在构建 APK 工程时,由 aapt 工具生成,定义在 R 文件中。

本文作者:刺胃、辛文

Quinox 客户端框架是类 OSGi( like-as)框架的实现。Quinox 一词来源于著名的 OSGi 框架的实现 Equinox。

public static final class layout {

xmapping.txt

}

xAndroid 守护进程运行的的代码和资源越多,APK 文件的 size 这样 大,Android 守护进程运行也这样 比较复杂;

Quinox 容器框架的目标是正确处理 Android 客户端 App 模块化和动态化这两大核心问题图片。增、删这两项能力,更多的是用来实现动态化能力的,方便容器对各个 Bundle 进行动态加上、删除。否则 本文着重描写模块化的能力,全都这每种,大伙后续单开专题来分析容器的动态化能力。

随着 Android 守护进程运行运行所能实现的功能这样 强大和比较复杂,随之而来的是:

否则 大伙将哪几种 Bundle 的 GAV(GroupId,ArtifactId,Vesion)的集合,称之为基线。

5.容器化

3.5 Bundle 包属性及配置土依据

public static final class drawable {

x每一另4个 模块由独立的小团队否则 买车人来进行开发、维护、测试、集成。

在 OSGi 规范中,Bundle 是有全都属性的。Bundle 工程输出的 APK 与常规的 APK 有一另4个 不同点,mPaaS 插件会将 Bundle 的所有属性生成一另4个 特殊的文件上放你什儿 APK 中,供容器去解读。

这4个 byte 含义如下:

原文发布时间为:2018-11-26

public static final class string {

Bundle 包文件,在构建完成后来,通常要 deploy 到本地/远程的 mvn 仓库中,以供或多或少 Bundle 工程引用,或是被 Portal 工程集成。

由本章节结速英语 ,大伙将从支付宝客户端的采集方案入手,细分拆解客户端在“容器化框架设计”、“网络优化”、“性能启动优化”、“自动化日志采集”、“RPC 组件设计”、“移动应用监控、诊断、定位”等具体实现,带领大伙进一步了解支付宝在客户端架构上的迭代与优化历程。

bundle

如下图所示:

这样 ,作为平台级别的 Android 客户端 App 究竟该怎么才能 才能 的进行框架设计,都可不可以满足千变万化的移动互联网时代的困难和需求?

}

基于此框架的客户端 App,详细就有由一另4个 个的积木搭建而成,哪几种积木被称之为:Bundle。

Android 开发者们深切体会到一另4个 稳健可靠、可扩展的、支持大规模并行开发的客户端开发框架对于平台级别的客户端 App 的重要性。事实上,客户端框架设计的健壮性和扩展性,在面对上述需求和正确处理困难上,往往能达到事半功倍的效果,尤其是 Android 客户端开发人员将深受其利。

当某一另4个 团队/买车人开完一另4个 Bundle 工程的新功能,并经过测试达到可发布清况 ,就都需要更新基线里的版本号。大伙将你什儿 过程称之为进基线。大伙认为:基线里打出来的 APK 是稳定可运行的;这样 稳定 Bundle 工程包不应该进基线。

6. 小结

Bundle 基线机制都需要很好的隔离了模块之间的相互影响,保障了不同团队间开发环境的和谐与稳定,达到了大伙后来的设计的初衷,否则 都需要很好的支持多团队并行开发。

public static int xxx_bg=0x1e08000;

2. Quinox 简介

示例代码:

}

定制化的组件启动器,还有一另4个 好处而是我都需要做到 Activity 的动态运行。所谓动态运行,是指运行出厂未注册在 Manifest 中的 Activity。这块功能,更多是为了支持容器动态化的能力。

本文来自云栖社区公司合作 协议伙伴“安卓巴士Android开发者门户”,了解相关信息都需要关注“安卓巴士Android开发者门户”。

x第4个字节为:typeId。它表示的是不同的资源类型,如字符串,布局,图片,动画等。

x第一另4个 字节为:pacakgeId。

基于 Quinox 容器框架开发的 Android 项目,代码工程则有有四种 (三级)类型

关于容器管理器的改的能力,Quinox 主而是我利用改的能力,做或多或少启动性能的优化,以及机型适配上的工作,这里涉及源码较多,大伙不做越多分析。

(本篇文章大伙着重关注模块化相关内容,后续大伙通过或多或少文章分析 动态化的能力。)

xBundle 接口包(都需要理解为一另4个 jar 包,它包含且暴露该 Bundle 提供的接口类)

如上所述,Bundle 工程的输出也是 APK 文件。

前面否则 讲述过,构建 Final APK 我我确实主要而是我将全都的 Budnle APK 合并成最终的 APK 的过程,而哪几种众多的 Bundle APK 们都存放于 mvn 仓库中。

3.2 Bundle 工程

在 Quinox 容器化的框架内,原生的资源管理肯定无法实现多 Bundle 的资源管理,这后来,大伙就构建了 Bundle 资源管理器,来专门正确处理各个 Bundle 的资源的加载、调用等工作,替代了 Android 原生的资源管理逻辑。

x我确实 Bundle 包文件本质上是 APK 格式,否则 该 APK 是无法运行的。一齐,Bundle 工程被 deploy 到 mvn 仓库里时,它的后缀名是会改为.jar。

5.1 容器管理器:增、删

4. 资源管理

public static int xxx_str=0x1e08001;

此外,移动客户端通常需要面对动态化开发的挑战;Bug 紧急修复等运维需求;一齐详细就有或多或少在线运营的需求,如动态采集广告,推送接入活动等。否则 每次有运维、运营需求,都需要一次客户端发版,那将是传统的开发人员的梦魇。

xAndroidMannifest.xml

x根据基础技术层级、客户端的业务线等原则,对客户端守护进程运行运行进行模块化拆分。

1.3 框架设计原则

到这里,全都读者应该否则 理解到了,Quinox 容器框架关于资源 id 冲突的正确处理方案是,让 mPaaS 打包插件使用改造过 aapt 工具,对每一另4个 Bundle 工程都指定不同 packageId,进行分区隔离,从而确保不同的 Bundle 之间资源 id 是越多重复的。这也是为哪几种 Bundle 工程里需要指定 packageId 的缘故。

下表将列举 Bundle 的所有属性以及配置土依据:

容器管理器使用最频繁的功能接口应该是查询接口:

常规的 Android 项目开发,代码工程通常有有四种 (两级)类型

否则 Activity 动态运行的实现逻辑涉及较多的核心技术点,全都大伙暂时不进行具体实现的剖析。

x每一另4个 模块都需要进行热插拔,单个模块的插拔不影响整体的工程的编译运行。

5.2 容器管理器:改

public final class R {

xBundle 工程跟常规的 Android Application 工程非常的相似于:它实物也会有多个 Library(Android Module);它的输出形式也是 APK 格式。

一齐,否则 Activity 是大伙自主的启动器进行的创建,大伙还都需要对 Activity 进行或多或少定制化的改造,方便其更好的适配容器这套体系。比如说给 Activity 赋予大伙自定义的资源管理器,管理 Activity 堆栈并对外提供接口,对 Activity 各生命周期做或多或少切面工作等等。

public static int xxx_id=0x1e080001;

关于 Bundle 工程的型态图请参考:

大伙都需要归纳为:平台级客户端框架需要要正确处理的是模块化和 动态化这两大核心问题图片。

packageid

关于 Quinox 容器化这里,否则 目前为止,Quinox 暂未开源,全都本章节内,大伙暂时不涉及到源码分析。

否则 ,否则 所有 Bundle 包详细就有独立编译的,它们中的资源极否则 指在着相同的资源 id。否则 ,当指在相同资源时,就否则 指在冲突,这样 怎么才能 才能 正确处理资源 id 的冲突呢?

public static int xxx_layout=0x1e08000;



后边大伙聊了全都关于 Bundle 一段话题,这样 整个容器化的核心,也是怎么才能 才能 管理各个 Bundle。这时就要引出大伙的容器管理器了,容器管理器的主要工作而是我协调各个 Bundle,对各种信息进行增详细查。

在应用启动后,大伙的容器管理器会读取配置信息,生成各 Bundle 的信息实例。

Bundle 是 OSGi 规范的模块化基本单位,与 Android 里的 android.os.Bundle 是另4个 详细不同的概念。

OSGi 里的 Bundle 指的是 Java 守护进程运行运行的基本单位,它是一另4个 模块单元(Jar 格式),也是上文 Quinox 简介里提到的积木。

基于 Quinox 容器框架开发的守护进程运行运行也是由众多的 Bundle(APK 格式)构成。

3. Bundle 介绍3.1 哪几种是 Bundle

}

1.1 开发背景

1.2 平台级客户端框架面临的问题图片



本章节将从项目开发的另4个 不同的时期对 Bundle 的型态进行阐述:

x根据 Android Component 类名进行查询(还记得 Bundle 的 Component-Name 属性么?)

4.2 资源 id

bundle_project

关于 Bundle 工程,大伙需要了解以下三点:

通过管理器的查询接口,大伙进行各个 Bundle 之间的协调、通信,完成容器化的功能。

4.1 资源管理器

作为 Android 开发人员,大伙知道通过 android.content.res.Resources 对象都需要获取字符串、布局、图片、动画等资源。

x根据 BundleName 进行查询(还记得 Bundle 的 Require-Bundle 属性么?)

x基于 Quinox 容器的 Application 工程(可称之为 Portal 工程)则是将众多 Bundle(APK)合并成一另4个 APK(Final)的过程。这里是合并,而详细就有编译,全都生成最终 APK 的下行下行速率 否则 非常快,否则 编译否则 被分布式的进行在各个 Bundle 中了。基于 Quinox 容器开发的客户端守护进程运行,需使用 mPaaS 定制的构建工具(即打包插件)。

x第三第四另4个 字节合起来为:资源名称的 id

5.3 容器管理器:查

x根据 packageId 进行查询(非27的 Bundle)

5.4 组件的启动



本节将介绍支付宝 Android 容器化框架设计的基本思路。

x模块与模块之间要做到彻底解耦,模块之间都需要通过接口进行依赖。

除了 APK 文件之外,Bundle 工程的构建结果还包含:

1. 前言

通过本节内容,大伙否则 初步了解了 mPaaS 在安卓端容器化框架的设计思路和相应模块。否则 篇幅限制,全都技术要点大伙无法一一展开。

3.4 Bundle 基线

除了容器管理器,还有一另4个 重要的点而是我组件的启动器。Quinox 容器定制类原生 Android Activity 的启动流程,从而自主管理 Activity 的创建以及生命周期。