我是Dagger的新手。 目前我创建示例项目一些剪辑代码:
MyComponent.java
@PerActivity
@Component(modules = MyModule.class)
public interface MyComponent {
void inject(TutorialActivity activity);
}
MyModule.java
@Module
public class MyModule {
@Provides
Position providePosition() {
return new Position();
}
}
PerActivity.java
@Scope
@Retention(RUNTIME)
public @interface PerActivity {}
TutorialActivity.java
public class TutorialActivity extends AppCompatActivity{}
编译项目时出现错误:
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>
因此,如果我将TutorialActivity更改为:
public class TutorialActivity extends Activity{}
or even
public class TutorialActivity{} // Without extends
然后它会正常工作。(我可以看到Dagger2生成的类)。
请帮忙!
感谢。
更新
我的项目结构:
common
模块。app
模块。 (app模块将使用通用模块作为gradle)。在build.gradle(common和app module)中,我添加了:
apt "com.google.dagger:dagger-compiler:${daggerVersion}"
compile "com.google.dagger:dagger:${daggerVersion}"
在common.gradle的公共模块中:
provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}"
如果我有2个模块,则只会出现错误。 (模块app
取决于common
)。
如果我将组件/模块移动到模块common
- &gt;这行得通。
但当我把它移到app
模块 - &gt;编译时出错。
答案 0 :(得分:2)
我不确定您的问题是Dagger的问题,因为我没有看到您在Android组件中请求任何依赖项。
尽管如此,您需要在build.gradle
中使用此方法来使用depdendency injection annotations。
provided 'javax.annotation:jsr250-api:1.0'
答案 1 :(得分:0)
感谢@plash的回答。
重新检查两个模块后。 我发现我只添加了:
provide "org.glassfish:javax.annotation:${javaxAnnotationVersion}"
在common
模块中。
在我添加了两个模块后,然后编译成功。(Dagger生成类。)