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

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

apply plugin: 'com.taobao.atlas'

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

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

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
   //...
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/18/android-componentized-container-framework-atlas/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android组件化容器框架Atlas
Atlas基本简介 Atlas是伴随着手机淘宝的不断发展而衍生出来的一个运行于Android系统上的一个容器化框架,我们也叫动态组件化(Dynamic Bundle)框架。它主要提供……
<<上一篇
下一篇>>
文章目录
关闭
目 录