Android Dagger2-库使用
我对新的android dagger2 v2.11有问题。 这只是我试图做的简单问题。我计划制作一个共享库,它将在不同的应用程序中大量使用,并将所有库di(dagger stuff)逻辑放在其中,这样我就可以将应用程序挂在它上面 我会尽力解释我到目前为止的情况 我有名为app的应用程序模块和名为依赖注入的android库。(lib) 应用程序内我已使用di实施了MainActivity。 在lib中我用di实现了一个活动和一个类 我试图使用@Inject将lib中的这两个元素用于应用程序中的MainActivity 我试着用几种方法来完成它。 1.实现lib中的所有di和app中的所有di,然后在MainActivity中使用@Inject。 2.在应用程序中实现AppComponent和ActivityBuilder,并从其中的库扩展BaseAppComponent和BaseAppActivityBuilder。 3.从应用程序类中分别实现di和调用库匕首设置 每次都有其他错误。我真的不确定是什么问题,所以无法更好地说明它。但我已经把我的简化项目放在了底部,这样你就可以看一看,如果你更容易解释的话,甚至可以做出贡献 过去几天我一直在试图理解为什么它不起作用,所以如果你能给我一些提示,我将不胜感激Android Dagger2-库使用,android,dagger-2,dagger,Android,Dagger 2,Dagger,我对新的android dagger2 v2.11有问题。 这只是我试图做的简单问题。我计划制作一个共享库,它将在不同的应用程序中大量使用,并将所有库di(dagger stuff)逻辑放在其中,这样我就可以将应用程序挂在它上面 我会尽力解释我到目前为止的情况 我有名为app的应用程序模块和名为依赖注入的android库。(lib) 应用程序内我已使用di实施了MainActivity。 在lib中我用di实现了一个活动和一个类 我试图使用@Inject将lib中的这两个元素用于应用程序中的Ma
这是我所有尝试的git repo:在将Gradle版本降级到2.3.3之后,我能够用Android Studio 2.3.3运行你的应用程序。以下是变化:
buildToolsVersion "25.0.1"
targetSdkVersion 23
classpath 'com.android.tools.build:gradle:2.3.3'
另外,我用compile替换了实现
在将Gradle版本降级到2.3.3之后,我可以用Android Studio 2.3.3运行你的应用程序。以下是变化:
buildToolsVersion "25.0.1"
targetSdkVersion 23
classpath 'com.android.tools.build:gradle:2.3.3'
另外,我用compile替换了实现
经过多次尝试,我终于让它运行起来了。 但毕竟对新匕首还是有一些奇怪的感觉,我仍然不确定为什么有些东西不起作用,尽管它们应该起作用 在DuckModule中,我需要添加ProviderActivity(),尽管在单模块应用程序中,dagger自己处理它
@Module
public class DuckModule {
@Provides
DuckActivity provideActivity() {
return new DuckActivity(); <--
}
@Provides
DuckContract.View providesLibActivity( DuckActivity duckActivity ) {
return duckActivity;
}
}
所以我的lib组件得到了useles
@Component(modules = {
PlantActivityBuilder.class,
SharedPrefsModule.class
})
public interface PlantComponent {
}
为了使其正常工作,我需要将lib组件中的所有模块放入app组件:
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBuilder.class,
SharedPrefsModule.class, <--
DuckModule.class <--
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application( Application application );
AppComponent build();
}
void inject( App app );
}
如果您找到了其他更快更干净的方法,请与我们分享。经过多次尝试,我终于让它运行起来了。 但毕竟对新匕首还是有一些奇怪的感觉,我仍然不确定为什么有些东西不起作用,尽管它们应该起作用 在DuckModule中,我需要添加ProviderActivity(),尽管在单模块应用程序中,dagger自己处理它
@Module
public class DuckModule {
@Provides
DuckActivity provideActivity() {
return new DuckActivity(); <--
}
@Provides
DuckContract.View providesLibActivity( DuckActivity duckActivity ) {
return duckActivity;
}
}
所以我的lib组件得到了useles
@Component(modules = {
PlantActivityBuilder.class,
SharedPrefsModule.class
})
public interface PlantComponent {
}
为了使其正常工作,我需要将lib组件中的所有模块放入app组件:
@Component(modules = {
AndroidInjectionModule.class,
AppModule.class,
ActivityBuilder.class,
SharedPrefsModule.class, <--
DuckModule.class <--
})
public interface AppComponent {
@Component.Builder
interface Builder {
@BindsInstance
Builder application( Application application );
AppComponent build();
}
void inject( App app );
}
如果您找到其他更快更干净的方法,请与我们分享。您好,谢谢您的回答。如果不解释它为什么起作用,你就不能接受这个答案吗?此外,我认为,无论何时需要降级smth,这都不是一个真正令人满意的解决方案。尤其是Gradle版本。我不知道原因是什么。但我建议你不要使用不稳定的构建。如果你使用-beta6 gradle插件,这可能就是问题所在。此外,大多数文档没有反映这些更改,因此您使用的功能在新版本中可能已经更改。您好,感谢您的回答。如果不解释它为什么起作用,你就不能接受这个答案吗?此外,我认为,无论何时需要降级smth,这都不是一个真正令人满意的解决方案。尤其是Gradle版本。我不知道原因是什么。但我建议你不要使用不稳定的构建。如果你使用-beta6 gradle插件,这可能就是问题所在。此外,大多数文档没有反映这些更改,因此您使用的功能在新版本中可能已经更改。您有一个模块是com.android.library。一个库模块怎么能有活动和应用程序?你有一个模块是com.android.library。库模块如何具有活动和应用程序?