Android组件化容器框架Atlas

Atlas基本简介

Atlas是伴随着手机淘宝的不断发展而衍生出来的一个运行于Android系统上的一个容器化框架,我们也叫动态组件化(Dynamic Bundle)框架。它主要提供了解耦化、组件化、动态性的支持。覆盖了工程师的工程编码期、Apk运行期以及后续运维期的各种问题。

与插件化框架不同的是,Atlas是一个组件框架,Atlas不是一个多进程的框架,他主要完成的就是在运行环境中按需地去完成各个bundle的安装,加载类和资源。

官网:http://atlas.taobao.org/
文档:https://alibaba.github.io/atlas/
Github:https://github.com/alibaba/atlas

Atlas对app的划分

拆分 定位 说明
host 基础支持 包含独立的中间件,以及一个Base的工程,
里面可能包含应用的Application,应用icon等基础性内容
bundle 业务层基本单位 运行期按需动态加载
bundle可以调用host的代码和资源,同时bundle之间允许存在依赖关系

Atlas能做什么

  • 工程模块的独立加载和运行
  • 及时上线新需求、快速迭代
  • 业务灰度与技术灰度的快速验证
  • 动态修复线上故障
  • 有问题及时回滚

从app的开发期 -> 运行期 -> 上线后的运维期,Atlas提供了一整套完整的支持

周期 说明
工程期 实现host、bundle独立开发、调试的功能,bundle独立
运行期 实现完整的组件生命周期的映射,类隔离、资源共享等机制
运维期 增量更新修复能力,提供对class、so以及资源的增量更新修复能力,快速升级

Atlas诞生背景

随着手机淘宝业务的快速增长,协作研发团队的不断扩大,技术也面临着更多挑战:一方面代码量快速上升导致方法过多,限制打包的正常输出;另一个方面各业务线的开发和集成都需要到一个apk上,业务间相互耦合严重,集成开发工作效率低下。这个大背景下,急需要做一次从构建、集成、交付的技术改造,于是Atlas作为手淘运行的容器诞生了,它灵活的解决了各个业务开发期间的相互独立解耦,而且提供了各个模块线上独立动态能力。

Atlas功能原理

Atlas类加载机制(加载顺序):

  1. 查找自身内部的class(DelegateClassLoader)
  2. 查找bundle依赖的bundle内的class(BundleClassLoader)
  3. 查找主apk中的class(PathClassLoader)

Bundle:类似OSGI规范里面bundle(组件)的概念,每个bundle有自己的classloader,与其他bundle相隔离,同时Atlas框架下bundle有自身的资源段(PackageID,打包时AAPT指定);另外与原有OSGI所定义的service格式不同之处是Atlas里面Bundle透出所有定义在Manifest里面的component,随着service,activity的触发执行bundle的安装,运行。

awbAndroid Wireless Bundle的缩写,实际上同AAR类似,是最终构建整包前的中间产物。每个awb最终会打成一个bundle。awb与aar的唯一不同之处是awb与之对应有个packageId的定义。

host:宿主的概念,所有的bundle可以直接调用host内的代码和资源,所以host常常集合了公共的中间件,UI资源等。

Atlas接入

引用Atlas插件及依赖仓库,修改工程的build.gradle

(1)注释默认的gradle-plugin,添加atlasplugin

1
2
3
4
5
6
7
buildscript {
repositories { jcenter() }
dependencies {
//classpath 'com.android.tools.build:gradle:3.1.3'
classpath "com.taobao.android:atlasplugin:2.3.3.rc63"
}
}

(2)gradle版本使用3.3

修改文件:gradle\wrapper\gradle-wrapper.properties

参考:https://github.com/alibaba/atlas/issues/231

有两个概念com.android.tools.build:gradle:2.3.3gradle的版本。前者是google原生的android打包插件,是基于gradle运行的。Atlas修改了原生的打包插件。所以只需要依赖atlasplugin即可。目前的atlasplugin是基于com.android.tools.build:gradle:2.3.3改的,它需要的gradle版本是3.3。

bundle接入,修改bundle的build.gradle

1
2
3
4
5
6
apply plugin: 'com.taobao.atlas'

atlas {
//声明为awb 即bundle工程
bundleConfig { awbBundle true }
}

容器接入,修改app模块的build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apply plugin: 'com.taobao.atlas'
dependencies {
//核心sdk
compile('com.taobao.android:atlas_core:5.0.0@aar') {
transitive = true
}
//如果不需要用到atlas的动态部署功能,不需要依赖atlasupdate
compile 'com.taobao.android:atlasupdate:1.0.8@aar'

//设置bundle依赖
bundleCompile project(':firstbundle')
}
atlas {
atlasEnabled true
//...
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :