web-dev-qa-db-ja.com

Dagger 2およびAndroid Studio:機能しているが、生成されたクラスが表示されない

Android StudioプロジェクトでDagger 2を使用しようとしています。CoffeeMakerの例を使用しました。ただし、アプリをビルドして機能させることができました:-成功しません。 -デバッグすると、どちらも表示されない-さらに、DaggerCoffeeApp_Coffeeがリードとしてマークされている(シンボルを解決できない)

私のgradleファイルは:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.1.3'

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

allprojects {
    repositories {
        jcenter()
    }
}

そして

apply plugin: 'com.Android.application'


Android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.mateuyabar.Android.dagger2test"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false // ignoring some references from dagger-compiler
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:22.0.0'
    compile 'javax.inject:javax.inject:1'
    compile 'javax.annotation:javax.annotation-api:1.2'
    compile 'com.google.dagger:dagger:2.0'
    provided 'com.google.dagger:dagger-compiler:2.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'

}

ありがとう

23
Mateu

Hugo Visserによる Android-Aptプラグイン を使用します。

apply plugin: 'com.Android.application'
apply plugin: 'com.neenbedankt.Android-apt'

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    // the latest version of the Android-apt plugin
    classpath 'com.neenbedankt.gradle.plugins:Android-apt:1.4'
  }
}

Android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.mateuyabar.Android.dagger2test"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false // ignoring some references from dagger-compiler
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:22.0.0'
    compile 'javax.inject:javax.inject:1'
    compile 'javax.annotation:javax.annotation-api:1.2'
    compile 'com.google.dagger:dagger:2.0'
    apt 'com.google.dagger:dagger-compiler:2.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'
}

apt 'com.google.dagger:dagger-compiler:2.0'行も同様です。これにより、生成されたソースがASから見えるようになります。

24
nhaarman

私は同じ問題に遭遇しました。私の場合、新しいクラスをテストしていて、それらをメインクラスに個別に注入しようとしました。その場合、DaggerはファクトリからDaggerComponentsを生成しません。

簡単に言うと、1つのクラスに入るすべての注入を1つのモジュールと1つのコンポーネントに入れることを忘れないでください。 1つのクラスに複数のDaggerComponentを注入することはできません。注入されたクラスを集約することが、これらのコンポーネントのポイントです。

6
M Tomczyński