使用两个模块依赖时出现Class not found on path: DexPathList异常求助
解决DexPathList下的ClassNotFoundException问题
我之前也踩过这个坑!这种ClassNotFoundException关联DexPathList的问题,大多出在多模块依赖的打包、Dex配置或者构建缓存上,给你几个亲测有效的解决办法:
检查模块依赖的引用正确性
如果你是主模块依赖其他包含SplScreen类的模块,一定要确认依赖方式是正确的:在主模块的build.gradle里用implementation project(':your-target-module')(或api,根据你的依赖需求),而不是只手动添加jar包或者写错了模块名称。另外,要保证SplScreen类是public访问权限,没有被模块的构建配置排除打包。开启Multidex支持(针对方法数超限场景)
当应用总方法数超过65536时,单Dex装不下所有类就会出现这种找不到类的情况。开启步骤如下:- 在app模块的
build.gradle中配置:android { defaultConfig { multiDexEnabled true } } dependencies { // 如果你用的是AndroidX,换成androidx.multidex:multidex:2.0.1 implementation 'com.android.support:multidex:1.0.3' } - 自定义Application类继承
MultiDexApplication,或者在attachBaseContext方法中手动初始化:@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
- 在app模块的
清理构建缓存并重新编译
很多时候是旧的构建缓存导致类没有被正确打包,执行以下操作:- 点击Android Studio顶部菜单栏的
Build > Clean Project - 接着执行
Build > Rebuild Project - 也可以手动删除项目根目录的
.gradle文件夹、各模块下的build文件夹,再点击File > Sync Project with Gradle Files重新同步构建。
- 点击Android Studio顶部菜单栏的
检查混淆规则是否误删类
如果你的应用开启了代码混淆,要确保SplScreen类没有被混淆工具移除。在proguard-rules.pro中添加规则:-keep class mypackage.SplScreen { *; }验证Dex文件是否包含目标类
可以用Android SDK自带的dexdump工具检查apk里的dex文件,确认SplScreen是否被打包进去:dexdump -d /path/to/your/app.apk/classes.dex | grep "SplScreen"如果搜索不到结果,说明该类根本没被打包进apk,需要回头检查模块的
sourceSets配置,是否不小心排除了该类所在的目录。
内容的提问来源于stack exchange,提问作者amresh thakur
相关产品推荐
相关产品推荐

