android - MultiDex 问题 : java. lang.ClassNotFoundException:在路径上找不到类:DexPathList

标签 android android-multidex

我的应用程序遇到问题: 如果我在 Android Studio Instant Run 中停用,我的应用程序会在启动时崩溃并显示堆栈跟踪:

12-29 13:36:37.876 4549-4549/com.mycoolapp.debug E/AndroidRuntime: FATAL EXCEPTION: main
                                                                              Process: com.mycoolapp.debug, PID: 4549
                                                                              java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycoolapp.debug/com.myapp.SplashScreenActivity}: java.lang.ClassNotFoundException: Didn't find class "com.myapp.SplashScreenActivity" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.mycoolapp.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycoolapp.debug-2/lib/arm, /vendor/lib, /system/lib]]
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2216)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
                                                                                  at android.app.ActivityThread.access$800(ActivityThread.java:148)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:135)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5272)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
                                                                               Caused by: java.lang.ClassNotFoundException: Didn't find class "com.myapp.SplashScreenActivity" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.mycoolapp.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/com.mycoolapp.debug-2/lib/arm, /vendor/lib, /system/lib]]
                                                                                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                                  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                                                                                  at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                                                                                  at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2206)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365) 
                                                                                  at android.app.ActivityThread.access$800(ActivityThread.java:148) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                  at android.os.Looper.loop(Looper.java:135) 
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5272) 
                                                                                  at java.lang.reflect.Method.invoke(Native Method) 
                                                                                  at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
                                                                                Suppressed: java.lang.NoClassDefFoundError: com.myapp.SplashScreenActivity
                                                                                  at dalvik.system.DexFile.defineClassNative(Native Method)
                                                                                  at dalvik.system.DexFile.defineClass(DexFile.java:226)
                                                                                  at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
                                                                                  at dalvik.system.DexPathList.findClass(DexPathList.java:321)
                                                                                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
                                                                                        ... 14 more
                                                                                Suppressed: java.lang.ClassNotFoundException: com.myapp.SplashScreenActivity
                                                                                  at java.lang.Class.classForName(Native Method)
                                                                                  at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                                                                                  at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                                                                                  at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                                                                                        ... 13 more
                                                                               Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

据我研究,这属于 multidex: https://developer.android.com/studio/build/multidex.html

即使我将 multiDexEnabled 属性添加到我的 gradle 配置中,应用程序也会崩溃。仅当我启用 InstantRun(在后台启用 multidex)时,应用程序才会运行... 如果我创建一个 apk,安装可以正常工作,但应用程序在启动时崩溃并出现相同的错误。

由于我的 minSDK API 级别为 21,因此除了必要的 multiDexEnabled 属性之外,应该没有其他更改,对吗?

最佳答案

最后但并非最不重要的一点是我的回答: 我对 multidex 的所有配置都是正确的...我不知道为什么,但是在完全重新启动操作系统后,现在一切正常...:)

关于android - MultiDex 问题 : java. lang.ClassNotFoundException:在路径上找不到类:DexPathList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41382641/

相关文章:

android - Lollipop 中的 SwitchPreference 回调行为更改

android - 在 Android 中同时使用两个 MouseArea

java - ListView 未加载,在 textview.setText() 上返回 null 对象;

android - 如何在加载所有图像之前加载 Activity ?

java - 迁移到 Android Studio 2.2 后出现 DexIndexOverflowException

完全实现了 Multidex 的 Android 4.x NoClassDefFoundError

java - 使用 Gson 将 Json 响应解析为 java 对象

java - 在 Xamarin.Android 上启用 Multi-Dex 时出现 "Compilation failed: Unknown option: --multi-dex"

android - Android 5.0 Release模式下的 INSTALL_FAILED_DEXOPT 错误

java - Android - 使用 Multidexlist 转换类以进行调试 - Instagram JSON 解析器