7

पर स्विच करने के बाद डैगर 2 का उपयोग करते समय एंड्रॉइड स्टूडियो 2.0 में अपग्रेड करने से पहले मैं डैगर 2 का कोई समस्या नहीं कर सकता था। अब मुझे NoClassDefFoundError मिल रहा है इसने मुझे एक दिन से अधिक समय तक बंद कर दिया है और मैं कुछ मदद के लिए बाहर निकल रहा हूं।NoClassDefFoundError एंड्रॉइड स्टूडियो 2.0

ऐसा लगता है कि ग्रैडल मेरी AppModule कक्षा नहीं कर सकता है, भले ही यह स्पष्ट है कि यह मेरी परियोजना में है। मैंने multiDexEnabled true सेट भी शामिल किया है, भले ही मेरी परियोजना केवल कुछ फाइलें हों।

मैं जो कुछ भी ऑनलाइन पा सकता हूं वह कहता है कि आप आयात करने के लिए अपने पुस्तकालयों पर क्लिक कर सकते हैं। एंड्रॉइड स्टूडियो में ऐसी कोई लक्जरी नहीं है।

किसी भी मदद की सराहना की जाएगी और आपको मेरी निष्ठा वफादारी होगी।

04-21 17:26:54.006 7875-7875/com.androidtitan.spotscoreapp E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.androidtitan.spotscoreapp, PID: 7875 
java.lang.NoClassDefFoundError: com.androidtitan.spotscoreapp.main.injection.AppModule_ProvidesApplicationFactory 
at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.initialize(DaggerAppComponent.java:31) 
at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.<init>(DaggerAppComponent.java:23) 
at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.<init>(DaggerAppComponent.java:0) 
at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent$Builder.build(DaggerAppComponent.java:66) 
at com.androidtitan.spotscoreapp.App.onCreate(App.java:28) 
at com.android.tools.fd.runtime.BootstrapApplication.onCreate(BootstrapApplication.java:326) 
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1020) 
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5010) 
at android.app.ActivityThread.access$1600(ActivityThread.java:172) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1482) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5835) 
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:1399) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 


package com.androidtitan.spotscoreapp.main.injection; 

import android.app.Application; 
import android.content.Context; 

import javax.inject.Singleton; 

import dagger.Module; 
import dagger.Provides; 

AppModule

@Module 
public class AppModule { 
private static Application application; 

public AppModule(Application application) { 
    this.application = application; 
} 

@Provides @Singleton 
Application providesApplication() { 
    return application; 
} 

@Provides @Singleton 
Context providesApplicationContext() { 
    return application.getBaseContext(); 
} 
} 

AppComponent

package com.androidtitan.spotscoreapp.main.injection; 

import android.app.Application; 
import android.content.Context; 

import com.androidtitan.spotscoreapp.main.ui.activity.LoginActivity; 
import com.androidtitan.spotscoreapp.main.ui.fragment.LoginFragment; 
import com.androidtitan.spotscoreapp.main.ui.fragment.SignUpFragment; 

import javax.inject.Singleton; 

import dagger.Component; 

@Singleton 
@Component(
    modules = { AppModule.class, 
       LoginPresenterModule.class } 
) 
public interface AppComponent { 
Application getApplication(); 
Context getApplicationContext(); 

void inject(LoginFragment activity); 
} 

अनुप्रयोग आवेदन फैली

import android.app.Application; 
import android.support.multidex.MultiDexApplication; 

import com.androidtitan.spotscoreapp.main.injection.AppComponent; 
import com.androidtitan.spotscoreapp.main.injection.AppModule; 
import com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent; 
import com.firebase.client.Firebase; 

import timber.log.Timber; 

public class App extends Application { 

private static AppComponent appComponent; 

@Override 
public void onCreate() { 
    super.onCreate(); 

    Firebase.setAndroidContext(this); 

    appComponent = DaggerAppComponent.builder() 
      .appModule(new AppModule(this)) 
      .build(); 

    if (BuildConfig.DEBUG) { 
     Timber.plant(new Timber.DebugTree()); 
    } 

} 

public static AppComponent getAppComponent(){ 
    return appComponent; 
} 
} 

build.gradle (मॉड्यूल: अनुप्रयोग)

012,351,
apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' 

android { 
compileSdkVersion 23 
buildToolsVersion "24.0.0 rc1" 

defaultConfig { 
    applicationId "com.androidtitan.spotscoreapp" 
    minSdkVersion 16 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    multiDexEnabled true 


} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

packagingOptions { 
    exclude 'META-INF/DEPENDENCIES.txt' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/LICENSE.txt' 
} 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
testCompile 'junit:junit:4.12' 
apt 'com.google.dagger:dagger-compiler:2.0' 
compile 'com.android.support:multidex:1.0.0' 

provided 'com.google.dagger:dagger-compiler:2.0' 
provided 'org.glassfish:javax.annotation:10.0-b28' 
compile 'com.android.support:appcompat-v7:23.3.0' 
compile 'com.jakewharton.timber:timber:4.1.2' 
compile 'com.android.support:design:23.3.0' 
compile 'com.jakewharton:butterknife:7.0.1' 
compile 'com.firebase:firebase-client-android:2.3.1' 
} 

build.gradle (परियोजना: spotscoreapp)

buildscript { 
repositories { 
    jcenter() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:2.0.0' 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 

    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
} 
} 

allprojects { 
repositories { 
    jcenter() 
} 
} 

task clean(type: Delete) { 
delete rootProject.buildDir 
} 

AndroidManifest

`

<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:name=".App" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".main.ui.activity.LoginActivity" 
     android:label="@string/title_activity_login" 
     android:theme="@style/AppTheme.NoActionBar" /> 
    <activity android:name=".main.ui.activity.MainActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

`

+1

आप इस समस्या को हल किया? –

उत्तर

9

मैं एक बहुत ही इसी तरह के मुद्दे था और ऐसा करके इसका समाधान नहीं होता एंड्रॉइड स्टूडियो में सुंदर सामान्य चीजें। आप मूल रूप से

Invalidate Caches and then Clean Project

तुम्हें पता करने की जरूरत है, Dagger2 संकलन समय पर कोड का एक बहुत उत्पन्न करता है और कभी कभी चीजें गड़बड़ कर सकते हैं, खासकर यदि आप त्वरित भागो, एंड्रॉयड स्टूडियो द्वारा 2.0

5

प्रदान की उपयोग कर रहे हैं आपका ApplicationMultiDexApplication से विस्तार नहीं है, और न ही यह

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

क्या करता है और आप तुरंत भागो अक्षम करना चाहिए।

+0

विवरण यहां मिले जा सकते हैं https://developer.android.com/studio/build/multidex.html – thanhbinh84

1

मुख्य पथ के निर्माण.ग्रैडल में क्लास पथ "com.google.dagger: dagger: 2.4" जोड़ने का प्रयास करें।

नोट: संस्करण संख्या moudule के build.gradle के रूप में ही रखने के

संबंधित मुद्दे