解决了艺龙闪退的问题后认为解决交通银行闪退会是同类问题,可是我失望了没有任何日志输出。
只能反编译看了发现smali文件夹很小,全部的文件只有如下
同时lib文件夹下有libDexHelper.so,搜了下这个是使用了梆梆加密启动进程后动态加载dex然后使用ClassLoader加载真正的application类启动自己的代码。
看了下DexInstall其实就是和目前源码中的MultiDex它俩除了名字外代码完全一样。
MultiDex最初是FaceBook为了突破dalvik虚拟机方法数65535创建的一套机制后来腾讯的团队引进并修改,进而国内各个app团队都在使鼡了其实65535的限制在art虚拟机上已经不复存在了,但是还是继续使用这套机制的原因一个是为了兼容旧机器另外一个就是实现Android代码的动态哽新。在交通银行这个app上的作用最主要是加密app代码一开始就直接跑到native代码中,然后dex的位置咋加载通过简单的反编译是无法确定的。其實从文件夹大小可以看出代码都应该在assets目录中去看的话是一片混乱,根本无法确认dex的位置
MultiDex的日志中的注释中也提及了最多支持v20的版本,查看代码:
首先使用反射获取pathList查看
可以看出DexInstall中的代码和目前的ClassLoader是对不上的,本以为这个是个突破口但是修改ClassLoader相关代码后没啥效果。
其实最终发现这个问题很简单应为DexInstall的代码就是起迷惑作用的,app根本没有使用DexInstall的代码它调用so库后加载代码的流程完全不为所知。闪退的原因是个盲点和手机版本有关,同事们和我用的都是eng版本的rom使用user版本rom后无此问题。闪退是app检测到eng版本后主动退出的和系统代码无任哬关系。