遇到一个坑,
复现条件:
1、DexClassLoader加载上某个APK或jar
2、更新上面的APK或JAR,再次通过DexClassLoader 加载(文件名和dex释放路径保持和上次一致)
3、显式调用GC或系统触发GC时闪退
存在于4.X的系统中。
产生原因,当DexClassLoader实例化后,后将释放后的dex加载到dexpathlist,如存在则会进行对比,当两次加载的同路径、同文件名dex文件内容不一致时,则会打印警告Log,通知dex bad,进而gc时发生错误。
解决方案,在进程生命周期内如需要更新dex,请将源APK或JAR命名成不一样的,不要简单覆盖。或将dex输出目录设为不同。