2017-01-30 8 views
3

Как говорится в названии, Dagger2 не генерирует классы с префиксом Dagger * для моего Android-проекта. Я смотрел на все другие подобные должности, которые я мог найти, но ничего не помогает. Я пытаюсь добавить его в существующий проект, и у меня возникли некоторые начальные проблемы, связанные с тем, что он хорошо играет с привязкой данных, но я, похоже, разобрал это, т. Е. Не компилирует ошибки в привязке данных и генерирует для него код , Я также загрузил несколько примеров проектов, которые отлично работают.Dagger2 не генерирует Dagger * classes

Мой graddle файл верхнего уровня имеет

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 

в то время как мой уровень сборки имеет

apply plugin: 'com.neenbedankt.android-apt' 

.... 
final DAGGER_VERSION = '2.8' 
.... 

    compile 'javax.inject:javax.inject:1' 
    compile 'javax.annotation:javax.annotation-api:1.2' 

    apt "com.google.dagger:dagger:$DAGGER_VERSION" 
    compile "com.google.dagger:dagger:$DAGGER_VERSION" 
} 

Файл компонента чрезвычайно прост

@Singleton 
@Component(modules = { 
     AndroidModule.class 
}) 

public interface ApplicationComponent { 
    void inject(MainActivity activity); 
} 

AndroidModule файл содержит

@Module 
public class AndroidModule { 
    private final Context application; 

    public AndroidModule(Application application) { 
     this.application = application; 
    } 
} 

и класс Application имеет

import com.rockwellcollins.fsl.dagger.DaggerApplicationComponent; 
... 

public class FslApplication extends Application { 

    private static ApplicationComponent component; 

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

     component = DaggerApplicationComponent.builder() 
       .androidModule(new AndroidModule(this)) 
       .build(); 
    } 

    public static void inject(MainActivity target) { 
     component.inject(target); 
    } 

    public ApplicationComponent getComponent() { 
     return component; 
    } 
} 

и выход я получаю

Information:Gradle tasks [clean, :android-sliding-layer-lib:Library:generateDebugSources, :android-sliding-layer-lib:Library:mockableAndroidJar, :android-sliding-layer-lib:Library:prepareDebugUnitTestDependencies, :android-sliding-layer-lib:Library:generateDebugAndroidTestSources, :android-sliding-layer-lib:Library:compileDebugSources, :android-sliding-layer-lib:Library:compileDebugUnitTestSources, :android-sliding-layer-lib:Library:compileDebugAndroidTestSources, :mobile:generateDebugSources, :mobile:mockableAndroidJar, :mobile:prepareDebugUnitTestDependencies, :mobile:generateDebugAndroidTestSources, :mobile:compileDebugSources, :mobile:compileDebugUnitTestSources, :mobile:compileDebugAndroidTestSources, :wear:generateDebugSources, :wear:generateDebugAndroidTestSources, :wear:mockableAndroidJar, :wear:prepareDebugUnitTestDependencies, :wear:compileDebugSources, :wear:compileDebugAndroidTestSources, :wear:compileDebugUnitTestSources] 

Warning:WARNING: Dependency org.json:json:20131018 is ignored for debug as  it may be conflicting with the internal version provided by Android. 
Warning:WARNING: Dependency org.json:json:20131018 is ignored for release as it may be conflicting with the internal version provided by Android. 
Warning:View field aircraftList collides with a variable or import 
Warning:View field groundList collides with a variable or import 

C:\Git\android\mobile\src\main\java\com\rockwellcollins\fsl\FslApplication.java 
Error:(7, 38) error: cannot find symbol class DaggerApplicationComponent 
Error:org.gradle.api.internal.tasks.compile.CompilationFailedException: 
Compilation failed; see the compiler error output for details. 
Information:BUILD FAILED 

И как я уже сказал, никакой код не получает генерируется на всех для вещей Dagger. Если кто-нибудь может указать, в чем проблема, я был бы очень благодарен.

+1

Если вы используете привязку данных, вы можете не видеть все сообщения об ошибках из своей сборки. Проверьте этот вопрос и посмотрите, поможет ли он: http://stackoverflow.com/questions/37912127/dagger-2-on-android-no-error-messages/38642638#38642638 –

ответ

4

Вашей склонная зависимость должна быть

apt "com.google.dagger:dagger-compiler:$DAGGER_VERSION" 

Вы упускаете -compiler часть артефакта ид.

Эта ссылка также содержит некоторую полезную информацию. https://github.com/google/dagger#android-gradle

0

Я столкнулся с той же проблемой и потратил много времени на переполнение стека. Наконец-то я прохожу через this и могу найти решение. Вкратце, вы должны внести некоторые изменения в файл Gradle на уровне модуля. Пожалуйста, удалите

apply plugin: 'com.neenbedankt.android-apt'

в верхней части файла. И заменить

apt 'com.google.dagger:dagger-compiler:2.11' 

с

annotationProcessor 'com.google.dagger:dagger-compiler:2.11' 

После этого восстановить ваш проект, и вы будете иметь возможность импортировать классы префиксов Dagger. Хоп это поможет вам.