错误情况:
项目中使用的两个jar包之间存在相互调用,其中一个jar通过使用classLoader类加载按照全类名路径来加载该类,此时会报classNotFound错误。
对于网上说的通过Gradle clean完成之后再rebuild 等其它方法也尝试过,无法解决问题。
首先查看目录结构和配置,发现没有什么问题。
尝试在安卓的MainActivity中直接调用,发现可以调用。之后仔细排查发现在某一个类中改变了当前线程的ClassLoader
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
解决办法:
ClassLoader classLoader = MainActivity.class.getClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
博客讲述了在项目中遇到的两个jar包相互调用导致的ClassNotFoundException,问题根源在于线程上下文ClassLoader被改变。通过将ClassLoader设置回MainActivity的ClassLoader成功解决了问题。排查过程包括检查目录结构、配置,并尝试了Gradle clean和rebuild等常规解决方案。
2912

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



