title: NoClassDefFoundError When Using Dagger 2 After Switching to Android Studio 2.0
body: <p>Before upgrading to Android Studio 2.0 I could use Dagger 2 no problem.  Now I am getting a <code>NoClassDefFoundError</code> This has shut me down for more than a day and I'm reaching out for some help.  </p>
  
  <p>It seems as though Gradle cannot my <code>AppModule</code> class even though it is pretty clear that it is in my project.  I have even included set <code>multiDexEnabled true</code> even though my project is only a few files.  </p>
  
  <p>Everything I can find online says that you can click your libraries to be imported.  Android Studio has no such luxury.</p>
  
  <p>Any help would be greatly appreciated and you will have my undying loyalty.</p>
  
  <pre><code>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.&lt;init&gt;(DaggerAppComponent.java:23)
  at com.androidtitan.spotscoreapp.main.injection.DaggerAppComponent.&lt;init&gt;(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;
  </code></pre>
  
  <p>AppModule</p>
  
  <pre><code>@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();
  }
  }
  </code></pre>
  
  <p>AppComponent</p>
  
  <pre><code>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);
  }
  </code></pre>
  
  <p>App extends Application</p>
  
  <pre><code>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;
  }
  }
  </code></pre>
  
  <p>build.gradle(Module:App)</p>
  
  <pre><code>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'
  }
  </code></pre>
  
  <p>build.gradle(Project:spotscoreapp)</p>
  
  <pre><code>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
  }
  </code></pre>
  
  <p>AndroidManifest</p>
  
  <p>`
  </p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  
  &lt;application
      android:name=".App"
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" &gt;
      &lt;activity
          android:name=".main.ui.activity.LoginActivity"
          android:label="@string/title_activity_login"
          android:theme="@style/AppTheme.NoActionBar" /&gt;
      &lt;activity android:name=".main.ui.activity.MainActivity" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  &lt;/application&gt;
  </code></pre>
  
  <p>`</p>