接入了性能监控SDK,当用户端发生异常时可以将异常信息上传到后台统计平台。
根据关键字 NoClassDefFoundError 查到了官方文档
官方文档 https://developer.android.com/studio/build/multidex?hl=zh-cn#keep
使用官方文档修改配置模块的build.gradle,发现主dex分包配置无效。生成的apk可以在AndroidStudio中直接查看(把APK拖到AndroidStudio中或者去编译后的目录app/build/outputs/apk/*.apk双击进行查看)
最终排除掉MultiDex配置相关的排查方向
异常是加固组件上传的,是否是加固流程解析Dex文件异常导致
加固过程
读取初始的AndroidManifest文件,读取并保存初始的Application节点的类路径,如com.test.OriginApplication
修改AndroidManifest文件,替换Application节点的类路径,如jiagu.test.JiaguApplication
对原有的所有dex文件进行加密并存储到apk文件中
解加固相关的所有文件生成一个class.dex文件,作为加固后的apk的唯一dex文件
解加固过程
打开应用时,系统默认会加载新生成的dex文件以及新的AndroidManifest文件
此时相当于打开了另一个apk->jiagu.test.JiaguApplication,在新apk的Application初始化时,进行解加固操作
将原有的dex文件解压缩以及解密
使用类加载器加载原有的dex文件,将原有的类加载到内存中
此时com.test.OriginApplication因为原有的dex文件经过了类加载,原有的Application可以被加载和创建
使用原有的Application->com.test.OriginApplication替换ActivityThread中的Application->jiagu.test.JiaguApplication
应用生命周期回到正常的轨道
从以上流程可以知道,解加固过程存在加载dex文件的流程,如果该流程出现异常,就会导致类加载异常
加固组件需要丰富日志,当出现以上异常时,尝试手动加载相关类,观察是否会发生同一种异常。
该问题使用同种机型未能复现线上问题,待日志丰富后继续排查。
PS:近期发现类似报错,提示信息是ClassNotFound,但实际是低版本手机缺少了某个so库导致。当发生这种异常时,很难直接定位到相关问题。因为后台的异常报错中不会将异常信息和缺少so库做关联。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/179870.html