Dagger 2在AppCompatActivity中注入错误

qua*_*n91 7 android dagger-2

我是Dagger的新手.目前我创建示例项目一些剪辑代码:

MyComponent.java

@PerActivity
@Component(modules = MyModule.class)
public interface MyComponent {
    void inject(TutorialActivity activity);
}
Run Code Online (Sandbox Code Playgroud)

MyModule.java

@Module
public class MyModule {
    @Provides
    Position providePosition() {
        return new Position();
    }
}
Run Code Online (Sandbox Code Playgroud)

PerActivity.java

@Scope
@Retention(RUNTIME)
public @interface PerActivity {}
Run Code Online (Sandbox Code Playgroud)

TutorialActivity.java

public class TutorialActivity extends AppCompatActivity{}
Run Code Online (Sandbox Code Playgroud)

编译项目时我收到错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.IllegalArgumentException: expected one element but was: <android.support.v4.app.FragmentActivity, android.support.v4.app.TaskStackBuilder.SupportParentable>
Run Code Online (Sandbox Code Playgroud)

因此,如果我将TutorialActivity更改为:

public class TutorialActivity extends Activity{}

or even

public class TutorialActivity{} // Without extends
Run Code Online (Sandbox Code Playgroud)

然后它会正常工作.(我可以看到Dagger2生成的类).

请帮忙 !

谢谢.

UPDATE

我的项目结构:

  • common 模块.
  • app模块.(app模块将使用通用模块作为gradle).

在build.gradle(common和app模块)中,我添加了:

apt "com.google.dagger:dagger-compiler:${daggerVersion}"
compile "com.google.dagger:dagger:${daggerVersion}"
Run Code Online (Sandbox Code Playgroud)

在build.gradle中的公共模块:

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 
Run Code Online (Sandbox Code Playgroud)

如果我有2个模块,则只会发生错误.(模块app取决于common).如果我将组件/模块移动到模块common- >它工作.但是当我把它移到app模块 - >编译时出错.

qua*_*n91 0

感谢@plash 的回答。

在我重新检查这两个模块之后。我发现我只添加了:

provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}" 
Run Code Online (Sandbox Code Playgroud)

在模块中common

添加为两个模块提供后,编译成功。(Dagger 生成的类。)