atlas 框架开发常见问题总结

JAVA herman 1738浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

就在最近,阿里巴巴宣布Atlas开源。Atlas来自阿里巴巴的手淘部门,在实用性,可靠性等各方面都经过的淘宝的实践。今天就为大家总结一下关于Atlas开发常见的问题!

Atlas 简介

Atlas是伴随着手机淘宝的不断发展而衍生出来的一个运行于Android系统上的一个容器化框架,我们也叫动态组件化(Dynamic Bundle)框架。它主要提供了解耦化、组件化、动态性的支持。覆盖了工程师的工程编码期、Apk运行期以及后续运维期的各种问题。

  • 在工程期,实现工程独立开发,调试的功能,工程模块可以独立。

  • 在运行期,实现完整的组件生命周期的映射,类隔离等机制。

  • 在运维期,提供快速增量的更新修复能力,快速升级。

Atlas是工程期和运行期共同起作用的框架,我们尽量将一些工作放到工程期,这样保证运行期更简单,更稳定。

相比multidex,atlas在解决了方法数限制的同时以OSGI为参考,明确了业务开发的边界,使得业务在满足并行迭代,快速开发的同时,能够进行灵活发布,动态更新以及提供了线上故障快速修复的能力。

与外界某些插件框架不同的是,atlas是一个组件框架,atlas不是一个多进程的框架,他主要完成的就是在运行环境中按需地去完成各个bundle的安装,加载类和资源。

下面总结一下Atlas在开发过程中常见的问题!

需要去除的原生multidex初始化

Atlas容器内部集成了multidex的dex安装功能,所以原先multidex的初始化代码可以省略,也不需要添加multidex的三方库依赖,需要使用multidex的只需要build.gradle内部将multidex置为enable即可(Atlas内部集成该内容一方面是便于和容器的兼容,另一方面后续容器会优化原生multidex在dalvik上面的性能)

Multidex installation failureAtlas 报ClassNotFoundException异常

Bundle如果相互依赖,则构建起需要配置dependency,否则运行期会无法找到被依赖bundle内的class,且不支持为了查找性能,目前不支持二级依赖:比如A->B->C,如果A没有显式声明依赖C,则A bundle里面无法直接使用bundle C里面的Class,检查bundle依赖是否成功配置可以通过反编译Apk的主dex 查看android.taobao.atlas.framework.FrameworkProperties的field bundleInfo的内容,里面记录了所有bundle的依赖关系  2. 通过LayoutInflater 膨化xml,则xml里面如果有richview,则务必确保LayoutInflater持有的context的classloader可以load到该richview,假设context来自于A bundle的Activity,而xml来自于B bundle,如果A和B没有依赖关系,那么加载也肯定失败

Atlas 报NoClassDefFoundError异常

造成该问题的原因比较多,排查步骤第一个先检查Exception的源头是不是ClassNotFoundException,然后反编译排查类确实是否存在;

如果类本身存在,需要往前排查系统的警告信息,比如在Art的设备上会有class被reject的warning信息:

在Art的设备上会有class被reject的warning信息

在dalvik的系统上,则会带有VFY tag的警告信息:

VFY tag的警告信息

一般来说,由于ART设备警告的信息报在dex2oat的时候,所以往往与发生crash时的Exception信息相隔比较远,所以通常遇到该类问题,dalivk的设备拿来排查可能更能发现问题的原因。另外noclassdef造成的原有接口类找不到,方法丢失,方法参数不匹配,方法属性变更,混淆等,所以具体原因需要利用上述warning信息并对照反编译的代码去排查根本的原因

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » atlas 框架开发常见问题总结