2016-09-15 2 views
1

Я использую несколько библиотек для моего проекта, которые я добавляю в зависимости, используя build.gradle, такие как Volley и Caligraphy. Я попытался запустить приложение и проект построен очень хорошо, но когда приложение пытается получить доступ к одной из внешних библиотек, я получил эту ошибку:NoClassDefFoundError при использовании внешних библиотек в Android Studio

09-15 12:35:30.037 20659-20659/com.node8.peek:background_crash E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.node8.peek:background_crash, PID: 20659 
    java.lang.NoClassDefFoundError: Failed resolution of: Luk/co/chrisjenx/calligraphy/CalligraphyConfig$Builder; 
     at com.node8.peek.PeekApplication.onCreate(PeekApplication.java:48) 
     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012) 
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4593) 
     at android.app.ActivityThread.access$1600(ActivityThread.java:154) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5294) 
     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:904) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "uk.co.chrisjenx.calligraphy.CalligraphyConfig$Builder" on path: DexPathList[[zip file "/data/app/com.node8.peek-6/base.apk"],nativeLibraryDirectories=[/data/app/com.node8.peek-6/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 com.node8.peek.PeekApplication.onCreate(PeekApplication.java:48)  
     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012)  
     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4593)  
     at android.app.ActivityThread.access$1600(ActivityThread.java:154)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1382)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:135)  
     at android.app.ActivityThread.main(ActivityThread.java:5294)  
     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:904)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)  
    Suppressed: java.lang.ClassNotFoundException: uk.co.chrisjenx.calligraphy.CalligraphyConfig$Builder 
     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 

Я пытался очистки проекта и Invalidate Cache & Перезагрузитесь в Android Studio, но у меня все еще есть ошибка. Что могло вызвать эту ошибку? Это мой build.gradle:

buildscript { 
    repositories { 
     mavenCentral() 
     maven { url 'https://maven.fabric.io/public' } 
    } 
    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
     classpath 'com.google.gms:google-services:3.0.0' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'android' 
android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/NOTICE.txt' 
    } 
    defaultConfig { 
     applicationId "com.node8.peek" 
     minSdkVersion 21 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    dexOptions { 
     javaMaxHeapSize "4g" 
    } 
} 
repositories { 
    maven { url "http://jzaccone.github.io/SlidingMenu-aar" } 
    mavenCentral() 
    jcenter(); 
    maven { 
     url "https://jitpack.io" 
    } 
    maven { url 'https://maven.fabric.io/public' } 
} 
dependencies { 
    compile 'com.devbrackets.android:exomedia:3.0.2' 

    compile 'com.github.castorflex.verticalviewpager:library:19.0.1' 
    compile 'uk.co.chrisjenx:calligraphy:2.2.0' 
    compile 'com.jeremyfeinstein.slidingmenu:library:[email protected]' 
    compile 'net.simonvt.menudrawer:menudrawer:[email protected]' 
    compile 'com.sothree.slidinguppanel:library:3.3.0' 
    compile 'com.nikoyuwono:toolbar-panel:0.1.1' 
    compile 'com.android.support:design:22.2.1' 
    compile 'de.hdodenhof:circleimageview:2.0.0' 
    compile 'com.google.android.gms:play-services:9.2.0' 
    compile 'com.splitwise:tokenautocomplete:[email protected]' 
    compile 'com.klinkerapps:android-chips:[email protected]' 
    compile('org.apache.httpcomponents:httpmime:4.3.5') { 
     exclude module: 'org.apache.httpcomponents:httpclient' 
    } 
    compile 'com.android.support:recyclerview-v7:22.2.1' 
    compile('com.github.ganfra:material-spinner:1.1.1') { 
     exclude group: 'com.android.support', module: 'appcompat-v7' 
    } 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile 'com.google.code.gson:gson:2.3.1' 
    compile 'com.facebook.android:facebook-android-sdk:4.8.0' 
    compile 'com.android.support:recyclerview-v7:22.2.1' 
    compile files('libs/javacpp.jar') 
    compile files('libs/twitter4j-core-4.0.4.jar') 
    compile files('libs/javacv.jar') 
    compile project(':volley') 
    compile('com.twitter.sdk.android:twitter:[email protected]') { 
     transitive = true; 
    } 
    compile 'com.google.android.gms:play-services-maps:9.2.0' 
    //compile 'com.google.android.gms:play-services-location:8.1.0' 
    compile 'com.google.maps.android:android-maps-utils:0.4' 
    compile 'com.tumblr:jumblr:0.0.11' 
    compile 'oauth.signpost:signpost-core:1.2.1.2' 
    compile 'oauth.signpost:signpost-commonshttp4:1.2.1.2' 
    compile 'com.theartofdev.edmodo:android-image-cropper:2.2.+' 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.github.jonisaa:MaterialCalendarview:v1.2.2' 
    compile 'com.makeramen:roundedimageview:2.2.1' 
    compile 'com.github.lzyzsd:circleprogress:[email protected]' 
    compile 'com.google.firebase:firebase-core:9.2.0'      // this line must be included to integrate with Firebase 
    compile 'com.google.firebase:firebase-messaging:9.2.0' 
    compile 'com.google.android.gms:play-services-location:9.2.0' 
    compile 'com.google.android.gms:play-services-places:9.2.0' 
    compile 'com.timehop.stickyheadersrecyclerview:library:[email protected]' 

} 
apply plugin: 'com.google.gms.google-services' 

Edit: Я попытался удалить библиотеку каллиграфии из моего проекта, но теперь приложение дает эту ошибку всякий раз, когда я пытаюсь получить доступ к библиотеке залпа.

Редактирование2: Включение Instant Run решило проблему, но я не хочу использовать Instant Run, если это возможно, так как это заставило приложение занять много времени, чтобы загрузить его при первой установке. Почему мгновенный запуск вызвал NoClassDefFoundError? Есть ли способ предотвратить ошибку без включения Instant Run?

+0

Посмотрите на этот https://github.com/chrisjenx/Calligraphy/issues/275 –

+0

компиляции 'com.android.support:recyclerview-v7:22.2.1' в два раза ! – Amit

ответ

1

Вы можете попробовать обновить инструменты сборки, например, плагин gradle, lib, android studio до последней версии, а также попытаться перестроить проект.

+0

Я обновил buildtoolsVersion до '24 .0.2 'и восстановил проект, но у меня все еще была та же ошибка. Я использую Android Studio 2.1.3. – nodeDavid

+0

Фактически последняя версия - 24.0.3. Кстати, вы попробовали это решение http://stackoverflow.com/questions/30503342/noclassdeffounderror-on-calligraphy-library? – UmAnusorn

+0

Да, мой класс приложений уже расширяет MultiDexApplication. – nodeDavid

0

Если вы используете Android Studio 2.0, то отключите мгновенный запуск, проверьте, используется ли multidex 1.0.1 и проверьте, что вы вызываете MultiDex.init() перед конфигурацией каллиграфии. Надеюсь, это решит этот вопрос.

Ref: https://github.com/chrisjenx/Calligraphy/issues/224

+0

Я сделал все это и по-прежнему получил ту же ошибку. – nodeDavid