遇到一个坑,
复现条件:
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输出目录设为不同。
本文描述了使用DexClassLoader在Android 4.X系统中更新APK或JAR时遇到的问题及原因,当尝试覆盖相同的dex文件且内容不一致时会导致应用崩溃。提供了有效的解决方案。
1468

被折叠的 条评论
为什么被折叠?



