大Atlas!
Atlas是阿里巴巴在2016年推出的经过市场考验的最强插件化开发工具,一经推出,同花顺的同事们都连连叫好:atlas大法好啊,阿里巴巴大法好啊,那个时候也迫不及待地去开始使用,确实是现在最好的插件化工具,没有之一。插件化能帮你做的atlas几乎都给你想好了!壮哉大Atlas Orz
Atlas被支付宝弃用
现在换了家公司,在阿里系上班,闲来偶尔来看望看望大atlas的情况,就把支付宝的apk解压看看,发现atlas竟然被弃用了...
都知道atlas打出来的包都以so后缀的压缩包形式存在于lib文件夹下面或者asset是文件夹,现在的支付宝版本已经找不到插件包的踪影,看看2016年和2018年的支付宝lib包结构差别:
2016年支付宝是全力支持atlas,我仔细数了下,总共有97个so bundle包,如今到了8012,物是人非啊,一个屏幕不到,而且大部分还只是资源包,这说明这一个趋势:支付宝在逐步弃用atlas转而使用原生的类加载或者前端技术。
现在上一张dex对比图来验证:
不用标出哪个是2016哪个是2018的支付宝,大家心里肯定都答案了。
食之无味
为什么atlas这么好,支付宝却开始弃用了呢?诱因是android p的发布,大家可以看看这篇了解下 https://blog.csdn.net/tyro_smallnew/article/details/80468034 (Android P阻止调用非sdk api后,Atlas该何去何从)。
android p开始android开始禁止开发者使用非官方api,也就是禁止反射使用android不想让开发者使用的类和属性,但是atlas的工作原理就是反射这些不让用的api。
然而android p并不是主要原因,主要原因是 Atlas并不是刚需而且有些限制:
1、基于动态化加载的方案有许多,前端技术已经开始应用到app开发中,weex rn性能也已经达到开发者预期,前端方案明显是比atlas更有优势,而在支付宝中你会发现大部分都是前端页面
2、插件更新其实并不常用,一般大厂的应用都通过严谨的测试,出问题的概率比较小,大部分逻辑都是服务端来实现,可控性很强,所以插件更新在一些公司没有用武之地
3、Atlas依赖管理比较复杂,插件之间存在依赖也可能是多级依赖,如果要跨插件依赖需要整理好依赖树,但需求常改,之前的依赖树可能不符合需求需要重整,这个时候非常耗时耗力,而原生开发的依赖管理就方便得多
4、兼容问题,Atlas经历了好几代android的兼容:5.0时代的art虚拟机兼容、7.0浏览器资源加载兼容、各个版本的api兼容。。。你会在atlas核心代码中发现很多if else来判断android版本,不过atlas做的不错兼容的也很好,但每次android出版本都要兼容一次确实费时费力
因此Atlas在一些公司里变成了然并软的存在。。。
抛之可惜啊
虽然我现在也不用atlas,但是atlas里面确实有令人称道的黑科技。有一些技术是可以单独拿出来使用的,里面的ClassLoader逻辑、hook、资源加载都是牛人的存在。所以日后还是可以从atlas中榨取一些厉害的东西。
Atlas还未亡
虽然支付宝不用atlas,但是淘宝还在用,这套代码还是有人在维护的,不过atlas确实处于一个比较尴尬的阶段,前端技术飞速发展的时期Atlas该如何表演它的续集。