Android-Dagger 2不生成组件

每次我尝试构建项目时,都会发生以下错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V

遵循负责依赖项注入的类:

应用模块

@Module
public class ApplicationModule {

    private static final String APP_ID = "id";
    private static final String APP_SECRET = "secret";

    private final Application mApplication;

    public ApplicationModule(Application application) {
        mApplication = application;
    }

    @Provides
    Application provideApplication() {
        return mApplication;
    }

    @Provides
    @Singleton
    Client provideClient(Application application) {
        return new Client.Builder(APP_ID, APP_SECRET, application).build();
    }
}

应用组件

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {

    void inject(MainApplication application);

    Application getApplication();

    Client getClient();

}

主要应用

public class MainApplication extends android.app.Application {

    private ApplicationComponent component;

    @Inject
    Client client;

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

        ...

        component = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this))
                .build();
        component.inject(this);
    }

    public ApplicationComponent getComponent() {
        return component;
    }

}

和我的gradle.build(Module:app)

buildscript {
    repositories {
        jcenter()
        maven {
            url 'http://dl.bintray.com/amulyakhare/maven'
        }
    }
    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:3.2.5'
    }
}

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        applicationId "br.mobi.santor.agora"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

repositories {
    flatDir {
        dirs 'libs'
    }
}

final SUPPORT_LIBRARY_VERSION = '25.1.0'
final DAGGER_VERSION = '2.8'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile(name: 'kinvey-android-2.10.6', ext: 'aar')

    // AppCompat dependencies
    compile "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"
    compile "com.android.support:cardview-v7:$SUPPORT_LIBRARY_VERSION"
    compile "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION"
    compile "com.android.support:design:$SUPPORT_LIBRARY_VERSION"

    // Dagger dependencies
    compile "com.google.dagger:dagger:$DAGGER_VERSION"
    annotationProcessor "com.google.dagger:dagger-compiler:$DAGGER_VERSION"

    // Network dependencies
    compile 'com.squareup.picasso:picasso:2.5.2'

    // Utils dependencies
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
    compile 'joda-time:joda-time:2.9.7'

    testCompile 'junit:junit:4.12'
}

解决方法:

NoSuchMethodError几乎可以肯定意味着您在类路径上具有比用于编译的旧版本的Guava.确保您具有最新版本的Guava(几乎总是可以安全地使用给定的these compatibility guarnatees),并且它应该可以工作.

上一篇:java.lang.RuntimeException: Cannot create an instance of class com.xxx.xxxViewModel


下一篇:java.lang.reflect.InvocationTargetException (no error message)