在升级到
Android Studio 2.0之前,我可以使用Dagger 2没问题.现在我得到一个NoClassDefFoundError这让我关闭了一天以上,我正在寻求帮助.
似乎Gradle不能用我的AppModule类,即使它很清楚它在我的项目中.我甚至包括set multiDexEnabled true,即使我的项目只有几个文件.
我在网上找到的所有内容都表明您可以单击要导入的库. Android Studio没有这样的奢侈品.
任何帮助将不胜感激,你将获得我不懈的忠诚.
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(模块:APP)
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>
`