Dagger 2 и android Studio: работают, но не могут видеть созданные классы
Я пытаюсь использовать Dagger 2 в проекте Android Studio. Я использовал пример 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'
}
Спасибо
Ответы
Ответ 1
Используйте плагин Android-Apt от Hugo Visser:
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.
Ответ 2
Я наткнулся на одну и ту же проблему, в моем случае я тестировал новые классы и пытался вставлять их отдельно в свой основной класс, в этом случае Кинжал не будет генерировать нигде DaggerComponents из factory.
Просто не забудьте поставить все инъекции, которые входят в один класс в один модуль и один компонент. Вы не можете вставлять более одного DaggerComponent в один класс. Кроме того, точка этих компонентов для агрегирования введенных классов