Atlas

本文介绍了阿里巴巴的Atlas动态组件化框架,旨在解决Android项目中的模块化和组件化开发问题。Atlas支持高复用、低耦合和可插拔的特性,允许host和bundle独立开发调试,并能动态加载和卸载bundle,减少包体积。通过官方Demo,详细展示了如何接入和实现远程依赖加载以及bundle的按需下载加载。该框架已广泛支持各种Android设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看看阿里的动态组件化: https://github.com/alibaba/atlas/tree/master/atlas-docs

背景:

  1. 现在项目中都追求模块化开发、组件化开发。一个是避免代码重复开发(重复造轮子),另一个是方便维护和项目集成。

  2. Android 项目有方法数的限制(常说的64K限制),如果项目太大或者引用了太多的三方库(依赖库的方法数量也会计算在64k中)。现在通常使用的方法是 使用 multiDex。

  3. 一个很大的项目, 比如美团、淘宝、支付宝等。里面会融合很多功能。比如美团APK里面可能需要集成 猫眼APK、酒店民宿apk、外卖apk、抢票apk等等。这些项目在开发的时候是分布进行的。作为一个用户,如果我下载美团apk,不希望直接把所有相关的内容apk都带下来。我可能只是想用外卖或者电影票的功能。

host

基础支持

包含独立的中间件,以及一个Base的工程,里面可能包含应用的Application,应用icon等基础性内容

bundle

业务层基本单位

运行期按需动态加载。bundle可以调用host的代码和资源,同时bundle之间允许存在依赖关系。

 

接下来看看Atlas能做什么:高复用、低耦合、可插拔

  1. host和bundle都可以独立的进行开发和调试 。

  2. 支持运行bundle中的四大组件 。

  3. bundle可以直接使用host中的代码和资源 。

  4. 业务需要时,才会去加载对应bundle中的代码和资源

  5. 减少包体积。不常用的bundle放在云端,需要时按需下载。当用户设备空间紧张时,可以清理掉一些长期不用的组件 。

  6. 动态部署:类似于热更新。但是比热更新更加强大。

    1. 业务灰度新的sdk,快速测试效果,同时有问题以及时回滚

    2. 及时上线新需求,快速生效。

    3. 动态修复线上故障

这个框架已经支持了大部分的Android 设备:

接下来看下,如何接入这个框架:使用https://github.com/alibaba/atlas/tree/master/atlas-demo/AtlasDemo 官方的Demo

  1. 根目录Build.gradle

  2. Host:

    atlas {
    
        atlasEnabled true
        tBuildConfig {
            autoStartBundles = ['com.taobao.firstbundle'] //自启动bundle配置
            outOfApkBundles = ['remotebundle']
            preLaunch = 'com.taobao.demo.DemoPreLaunch'
            classInject false
            dataBindingBundles = ['com.taobao.databindbundle']
        }
    
        manifestOptions {
            addAtlasProxyComponents true
        }
    
    
        patchConfigs {
            debug {
                createTPatch true
            }
        }
    
    
        buildTypes {
            debug {
                if (apVersion) {
                    baseApDependency "com.taobao.android.atlasdemo:AP-debug:${apVersion}@ap"
                    patchConfig patchConfigs.debug
                }
            }
        }
    }
  3. Bundle:
     

    atlas {
        bundleConfig {
            awbBundle true
        }
        buildTypes {
    
    debug {
                baseApFile project.rootProject.file('app/build/outputs/apk/app-debug.ap')
            }
        }
    }
    group = 'com.atlas.demo'
    version = '1.0.1'
  4. 看看APP是如何运行的;

    1. 首先app 的gradle中规定了默认编译三个middlewarelibrary、splashscreen、activitygroupcompat 这三个module进入apk中。

    2. 在Manifest中定义com.taobao.splashscreen.WelcomeActivity 是进入应用第一个加载的Activity。

    3.  WelcomeActivity 中代码延迟3秒进入 com.taobao.demo.MainActivity (这里必须用全路径)------这不是普通的module之间的互相引用Activity

接下来就有两个问题了, 如何实现模块的独立动态更新 以及 如何实现依赖模块 使用时下载后加载。

准备工作:gradlew clean assembleDebug publish

adb install app/build/outputs/apk/app-debug.apk

  1. 如何实现远程依赖加载:各个业务bundle可以根据业务需求修改更新各自bundle的代码

    1. app工程目录下执行`../gradlew clean assembleDebug -DapVersion=apVersion -DversionName=newVersion`, 其中apVersion为之前打的完整APK的版本,newVersion为此次动态部署要生成的新的版本号。

      gradlew clean assembleDebug -DapVersion=1.0.0 -DversionName=1.0.1

    2. 检查build/output/tpatch-debug 目录下文件是否生成,将远程patch下载到你的设备上

    3. adb push app/build/outputs/tpatch-debug/update-1.0.0.json /sdcard/Android/data/com.taobao.demo/cache/update-1.0.0.json

      adb push app/build/outputs/tpatch-debug/patch-1.0.1@1.0.0.tpatch /sdcard/Android/data/com.taobao.demo/cache/patch-1.0.1@1.0.0.tpatch

  2. 如何实现 Bundle使用时下载后加载

    1. 添加远程bundle的依赖,参考 app/build.gradle下的 bundleCompile project(':remotebundle') 

    2. 声明远程bundle列表,参考 app/build.gradle下的atlas { tBuildConfig { outOfApkBundles = ['remotebundle'] }

    3. gradlew clean assembleDebug publish,远程bundle 路径:app/build/outputs/remote-bundles-debug

    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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值