2016-12-29 7 views
2

У меня возникла проблема с моим приложением: Если я дезактивирую в Android Studio Instant Run, мое приложение падает при запуске с помощью stacktrace:Проблема MultiDex: java.lang.ClassNotFoundException: Не нашел класс на пути: DexPathList

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, то установка будет работать, но приложение сбой при запуске с той же ошибкой.

Поскольку у меня есть API-интерфейс minSDK 21-го уровня, не должно быть никаких других изменений, кроме необходимого свойства multiDexEnabled, правильно?

+0

проверьте ваше имя пакета манифеста ... SplashScreenActivity независимо от того, определено ли оно правильно – rafsanahmad007

+0

Класс вашего приложения распространяется на MultiDexApplication? – AndroidRuntimeException

+0

Манифест в порядке, я также попытался распространиться из MultiDexApplication без каких-либо успехов. Андроиды doc также говорят, что это необходимо, только если у вас есть minSDK <21. – Fahim

ответ

2

Так последний, но не менее мой ответ: Вся моя конфигурация multidex было правильно ... Я не знаю, почему, но после полной ОС перезагрузить компьютер сейчас нормально все работает ... :)

+0

Спасибо! i обновил оболочку градиента, а затем я продолжал получать ту же ошибку, каждый раз, когда я запускал приложение, подкласс приложения не мог быть найден, даже если multidex был настроен правильно, после нескольких часов попытки понять, что не так, и попробовать миллион разных вещей (даже Invalidate Caches/Restart не работает), я наткнулся на ваш пост, перезапустил мою ОС, а затем он просто сработал. – Kostyantin2216

+0

@ Kostyantin2216 какая ОС? на компьютере или на смартфоне? – ElSajko

+0

@ElSajko Windows 7 computer, я отправил новый ответ, поскольку этот ответ был для меня лишь временным решением. – Kostyantin2216

1

Просто создайте новый телефон на AVD и попробуйте установить приложение на этот телефон. Надеюсь, он сработает.

+0

Это решение? –

0

принятый ответ был только временным исправлением для меня, после изменения кода и нескольких сборок ошибка вернулась.

После многих проб и ошибок реальной проблемой было расположение jdk, которое использовал мой проект, вместо использования встроенного jdk в студии android я использовал установленную версию oracle. После перехода к файлу> Структура проекта> Расположение и проверка SDK Использование встроенного JDK проблема была исправлена ​​навсегда.

0

Проверьте, если ваш путь к классам

'com.android.tools.build:gradle:3.1.0-alpha05' 

является уточненный, была такая же проблема и решить ее с полным обновлением.