首页 > 解决方案 > 未知错误:在路径上找不到类:DexPathList

问题描述

我的应用程序最近崩溃了,无论我进行什么更改都无法正常工作。它早些时候工作得很好,但是我一定是在重构一些变量/类时犯了一个错误。从 LOGCAT 返回的错误提到了一个我从未在我的项目中使用或实现过的类 NotifyStart,所以我不知道它是从哪里来的。我在下面包含了从 LOGCAT 返回的错误。

我已经尝试清理和重建以及禁用该项目的即时运行功能,但到目前为止没有任何效果。在 Home 活动有机会弹出之前,应用程序将无法启动并崩溃。


2019-07-24 20:38:57.065 27709-27709/com.example.camerakitqr E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.camerakitqr, PID: 27709
    java.lang.RuntimeException: Unable to instantiate application com.example.camerakitqr.NotifiyStart: java.lang.ClassNotFoundException: Didn't find class "com.example.camerakitqr.NotifiyStart" on path: DexPathList[[zip file "/data/app/com.example.camerakitqr-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.camerakitqr-1/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64]]
        at android.app.LoadedApk.makeApplication(LoadedApk.java:807)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5477)
        at android.app.ActivityThread.-wrap2(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1595)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6251)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.camerakitqr.NotifiyStart" on path: DexPathList[[zip file "/data/app/com.example.camerakitqr-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.camerakitqr-1/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.app.Instrumentation.newApplication(Instrumentation.java:992)
        at android.app.LoadedApk.makeApplication(LoadedApk.java:801)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5477) 
        at android.app.ActivityThread.-wrap2(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1595) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:203) 
        at android.app.ActivityThread.main(ActivityThread.java:6251) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
 

标签: javaandroid

解决方案


您必须为具有超过 64K 方法的应用程序启用multidex

修改你的 build.gradle:

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0"

         defaultConfig {
             minSdkVersion 14 //lower than 14 doesn't support multidex
             targetSdkVersion 22

             // Enabling multidex support.
             multiDexEnabled true
         }
}

dependencies {
    implementation 'com.android.support:multidex:1.0.3'
}

如果您正在运行单元测试,您将希望将其包含在您的 Application 类中:

public class YouApplication extends Application {

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

}

或者只是让您的应用程序类扩展 MultiDexApplication

public class Application extends MultiDexApplication {

}

注意: Android 5.0(API 级别 21)及更高版本使用原生支持多索引的 ART。因此,如果您的 minSdkVersion 为 21 或更高,则不需要 multidex 支持库。


推荐阅读