atlas 框架开发常见问题总结

就在最近,阿里巴巴宣布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信息并对照反编译的代码去排查根本的原因

atlas 框架开发常见问题总结

: » atlas 框架开发常见问题总结

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/251531.html

(0)
上一篇 2022年5月3日
下一篇 2022年5月3日

相关推荐

发表回复

登录后才能评论