关于广播报 RuntimeException : Didn't find class on path: DexPathList 等问题解决

本文介绍了解决Android应用中出现的RuntimeException: Didn't find class on path: DexPathList错误的方法。该问题通常发生在升级compileSdkVersion后,在低版本设备上出现。文章提供了具体的解决方案,包括添加依赖和支持多dex的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于广播报 RuntimeException : Didn’t find class on path: DexPathList

RuntimeException DexPathList ContentProvider

起因

项目升级了 compileSdkVersion版本从22 ->28 还有 *com.android.support. ** 等包

然后在低版本报错 如下

E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to get provider me.jessyan.autosize.InitProvider: java.lang.ClassNotFoundException: Didn't find class "me.jessyan.autosize.InitProvider" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/2.apk"],nativeLibraryDirectories=[/data/app-lib/2, /vendor/lib, /system/lib, /system/lib/egl]]
        at android.app.ActivityThread.installProvider(ActivityThread.java:4882)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
        at android.app.ActivityThread.access$1300(ActivityThread.java:141)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5103)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:525)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:773)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:589)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "me.jessyan.autosize.InitProvider" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/2.apk"],nativeLibraryDirectories=[/data/app-lib/2, /vendor/lib, /system/lib, /system/lib/egl]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
        at android.app.ActivityThread.installProvider(ActivityThread.java:4867)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425) 
        at android.app.ActivityThread.access$1300(ActivityThread.java:141) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:137) 
        at android.app.ActivityThread.main(ActivityThread.java:5103) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:525) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:773) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:589) 
        at dalvik.system.NativeStart.main(Native Method) 

原因 multiDex 的问题

解决方式

1、在dependencies中增加

api 'com.android.support:multidex:1.0.2@aar'

2、在Application中增加

 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

重新build 运行即可。

### 问题分析 `java.lang.ClassNotFoundException: com.blankj.utilcode.util.UtilsFileProvider` 是在使用 `AndroidX` 项目时常见的类加载失败错误之一。该问题通常发生在从旧版本的 `utilcodex`(基于 `android.support.v4.content.FileProvider`)升级到 AndroidX 后,但未正确迁移或清理依赖的情况下。 `UtilsFileProvider` 是 `utilcodex` 中用于文件操作的一个工具类,其内部可能引用了 `android.support.v4.content.FileProvider` 或其他非 AndroidX 兼容组件。当项目已启用 AndroidX 但依赖库尚未适配时,此类问题会频繁出现[^1]。 --- ### 解决方案 #### 1. 确保使用兼容 AndroidX 的版本 若项目已启用 AndroidX,应使用 `com.blankj:utilcodex:1.31.x` 或更高版本。这些版本已经完成 AndroidX 迁移,并且不再依赖 `android.support.v4` 组件。推荐使用: ```gradle implementation 'com.blankj:utilcodex:1.31.1' ``` 此版本中所有与 `FileProvider` 相关的代码均已替换为 `androidx.core.content.FileProvider`,从而避免类冲突和找不到类的问题[^1]。 #### 2. 启用 Jetifier 支持 如果使用的第三方库仍基于 `android.support.v4` 构建,而项目已启用 AndroidX,则需确保在 `gradle.properties` 文件中开启 Jetifier 支持: ```properties android.useAndroidX=true android.enableJetifier=true ``` Jetifier 会在构建过程中自动将旧版 Support Library 引用转换为 AndroidX 包路径,从而解决因类路径不一致导致的 `ClassNotFoundException` 问题。 #### 3. 清理项目并重建 若以上配置均正确但问题依旧存在,建议执行以下操作: - 删除 `/build` 目录 - 执行 Gradle 清理任务:`./gradlew clean` - 重新同步项目:点击 "Sync Project with Gradle Files" - 重新编译运行应用 此举可排除临时构建缓存带来的干扰。 --- ### 配置示例 **`build.gradle` (Module-level)** ```gradle android { namespace 'com.example.app' compileSdk 34 defaultConfig { minSdk 21 targetSdk 34 } } ``` **`gradle.properties`** ```properties android.useAndroidX=true android.enableJetifier=true ``` **`build.gradle` (Dependencies)** ```gradle dependencies { implementation 'com.blankj:utilcodex:1.31.1' } ``` --- ### 注意事项 - 若项目中存在手动定义的 `FileProvider` 实现,请确保其继承自 `androidx.core.content.FileProvider`。 - 检查 `AndroidManifest.xml` 中是否正确声明了 `UtilsFileProvider` 或相关组件。 - 使用 `--stacktrace` 或 `--info` 参数运行 Gradle 构建以获取更详细的错误日志,帮助定位具体出错模块。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Godery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值