淘宝框架atlas
如有错误请指正!
简介
Atlas是伴随着手机淘宝的不断发展而衍生出来的一个运行于Android系统上的一个容器化框架,我们也叫动态组件化(Dynamic Bundle)框架。它主要提供了解耦化、组件化、动态性的支持。覆盖了工程师的工程编码期、Apk运行期以及后续运维期的各种问题。
atlas是一个组件框架,atlas不是一个多进程的框架,他主要完成的就是在运行环境中按需地去完成各个bundle的安装,加载类和资源。
- atlas能做什么
- 工程模块的独立加载和运行
- 及时上线新需求、快速迭代
- 业务灰度与技术灰度的快速验证
- 动态修复线上故障
- 有问题及时回滚
原理—–>具体请参考官方文档
atlas类加载机制---加载顺序:
1. 查找自身内部的class
2. 查找bundle依赖的bundle内的class
3. 查找主apk中的class
Bundle: 类似OSGI规范里面bundle(组件)的概念,每个bundle有自己的classloader,与其他bundle相隔离,同时Atlas框架下bundle有自身的资源段(PackageID,打包时AAPT指定);另外与原有OSGI所定义的service格式不同之处是Atlas里面Bundle透出所有定义在Manifest里面的component,随着service,activity的触发执行bundle的安装,运行。
awb: android wireless bundle的缩写,实际上同AAR类似,是最终构建整包前的中间产物。每个awb最终会打成一个bundle。awb与aar的唯一不同之处是awb与之对应有个packageId的定义。
host: 宿主的概念,所有的bundle可以直接调用host内的代码和资源,所以host常常集合了公共的中间件,UI资源等。host和bundle的依赖关系如下图所示:
Android打包基础(视频课时2)
1.处理资源文件
2.处理aidl文件
3.编译java文件
4.class2dex
5.apk打包
6.签名
7.zipalign对齐
参考
gradle基础
Gradle史上最详细解析
Android Gradle 插件中文指南
自定义Gradle插件
官方文档—>英文好的可以去看,我是看不懂- -!
接入
官方demo中文件
module名 | 意义 |
---|---|
activitygroupcompat | demo中的工具类 |
app | 客户端代码 |
databindbundle | 使用Google bind框架demo |
firstbundle | 第一个业务bundle代码 |
lottie | splashScreen依赖的代码 |
middlewarelibrary | 中间键library,会打包到主dex中 |
publicbundle | 共bundle代码,不会打入主dex中 |
remotebundle | 远程bundle,在发布时不会编译进apk,而在客户端使用时,先下载后加载 |
secondbundle | 第二个业务bundle代码 |
secondbundlelibrary | 第二个业务单独依赖的代码 |
splashScreen | 闪屏代码 |
在工程build.gradle文件中引入
mavenLocal()//如果有GitHub地址就换成git上地址
classpath "com.taobao.android:atlasplugin:2.3.3.rc1"
在appbuild.gradle文件中引入
- 应用plugin
apply plugin: 'com.taobao.atlas'//atlas插件()
- 添加运行库依赖
compile('com.taobao.android:atlas_core:5.0.7.30@aar') {
//atlas核心库
transitive = true
}
compile 'com.taobao.android:atlasupdate:1.1.4.10@aar'//atlas框架更新功能相关的库