atlas

来源:互联网 发布:linuxrar解压软件下载 编辑:程序博客网 时间:2024/05/21 18:49

Atlas

  • Atlas
    • Atlas是什么
    • 为什么要用Atlas
    • 如何使用Atlas
      • 研究Demo
        • 下载工程
        • 导入工程
        • 研究Demo源码
          • 1 跑起来
          • 2 功能的代码使用
            • 插件化开发
            • 动态更新
            • 单Bundle调试
      • Demo源码分析
    • 补充阅读及引用资料

Atlas是什么?

结构简明容器框架

官网宣称其为动态组件化(Dynamic Bundle)框架,其简介中称可以并行迭代,灵活发布、动态更新。

为什么要用Atlas

如其官网所说。化繁为简,稳中有快,云端部署。

简而言之,即三点:

  • 并行迭代
  • 插件化开发
  • 动态更新

本文的目的在于将Atlas的使用和相关具体知识,尽量以朴实和贴合实际的语言,用能够落地的方式来叙述阐明。

如何使用Atlas

研究Demo

1.下载工程

​ 我们去下载Atlas’s Demo

2.导入工程

Demo工程位置:/你的下载目录/atlas-master/atlas-demo/AtlasDemo

3.研究Demo源码

3.1 跑起来

其Demo源码项目的README中这样写道:

Atlas Demo已经具备了一个小型app的基本框架,本demo中主要展示了Atlas的主客户端、业务bundle、业务bundle独有library、中间件library、远程bundle、公共bundle、闪屏等特性。

正准备build,我们发现其build报错

按照提示将我们的instant run关闭掉。

Clean后再次Build,已经能成功跑起Demo了。如下图。

AtlasDemo

其中动态部署模拟、远程组件模拟、单模块调试模拟应该就是对应其宣称三大功能动态更新、插件化开发及并行迭代了。

3.2 功能的代码使用

目录结构:

  • app目录:主客户端代码
  • firstbundle目录:第一个业务bundle代码
  • secondbundle目录:第二个业务bundle代码
  • secondbundlelibrary目录:第二个业务bundle单独依赖的library代码
  • remotebundle目录:远程bundle代码(远程bundle在APK发布时不会编译进APK内,而是在客户端使用时下载后加载)
  • publicbundle目录:公共bundle代码(不会打入主dex)
  • middlewarelibrary目录:中间件library(会打入主dex)
  • splashscreen目录:闪屏代码
  • lottie目录:splahscreen的依赖代码
  • activitygroupcompat目录:实现展示bundle 内的Fragment,因为bundle只通过Component的方式可以被依赖安装

其依赖关系如下:

三大功能,个人相对关心的是插件化开发,不过既然Atlas三者皆有,我们姑且都看看吧。

插件化开发

我们按图索骥,一步步来实现插件化开发。

1.我们在Demo中app的build.gradle添加远程bundle的依赖,如下图:

bundleCompile project(':remotebundle')

2.声明远程bundle列表

atlas { tBuildConfig { outOfApkBundles = ['remotebundle'] 

3.构建完整包,在app目录下执行

../gradlew clean assembleDebug publish

4.将远程so下载到你的设备上(主动下载和被动推送都可以),这里直接在PC上执行

adb push app/build/outputs/remote-bundles-debug/libcom_taobao_remotebunle.so /sdcard/Android/data/com.taobao.demo/cache/libcom_taobao_remotebunle.so

我们再次跑Demo,点击远程加载Bundle

我们能看到已经能正确的加载远程Bundle的Activity了。

AtlasDemo2

动态更新

打pathc的构建步骤:

1.各个业务bundle可以根据业务需求修改更新各自的bundle

2.app工程目录下执行

../gradlew clean assembleDebug -DapVersion=apVersion - DversionName=newVersion
  • apVersion为之前打的完整APK的版本

  • newVersion为此次动态部署要生成的新版本号。

ex: “主APk构建”的APK版本是1.0.0,然后简单更新firstbundle的string.xml里面的hello_blank_fragment属性为”这是第一个bundle的界面”。

然后执行

../gradlew clean assembleDebug -DapVersion=1.0.0 -DversionName=1.0.1

检查是app下否存在目录build/output/tpatch-debug

我们将patch文件传入手机,此处可以下载或者直接adb push进去。

紧接着,我们来打开demo,点击动态部署页面的红色按钮。等待数秒app会关闭,说明动态部署已经成功,重启App后发现自己改动的代码已经成功。

原文Demo中提到其优势。

动态部署的主要优势:摆脱版本迭代周期限制,新增需求灵活发布;降低版本频繁发布给用户带来困扰;发现问题及时回滚;短时间内更高的覆盖率

单Bundle调试

1.在设备上安装App,设备ADB连接成功。

2.修改一个bundle工程代码或者资源(设置生效的标识),例如我们这里的firstbundle中的FirstBundleActivity的onCreate中加一个Toast提示。如下。

3.在我们改动的这个bundle工程目录下执行

../gradlew clean assemblePatchDebug

4.重启应用即可看到效果:

Demo源码分析

​ 通过以上的试用,见证了奇迹以后,我们来看看和简单分析一下Demo源码的相关实现。

补充阅读及引用资料

从零开始的Android新项目11 - 组件化实践

Atlas:手淘Native容器化框架和思考

手淘组件化框架的前世今生和未来的路

Atlas官网

源码

0 0
原创粉丝点击