这是一个相当古老的问题,我相信作者已经找到了解决方案,但我认为这个问题缺少很多人想知道的答案。
因此,实际上,正如其他答案中所建议的那样,这通常可能是由您的架构问题引起的。
但有时它可能是合理的。例如,如果您需要在库中或在许多其他情况下访问您的应用程序 ID。
因此,如果您需要从库模块中的应用程序模块访问资源,
可以借助依赖注入轻松完成。
例如,使用 Dagger 可以这样做:
1.创建一个提供共享资源的模块。我们称它为集成模块。
@Module()
class IntegrationModule {
@Provides
@Named("foo")
fun provideFoo() = "Hey bro"
}
2.将其包含在您的 App 组件中
@Component(modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
IntegrationModule::class,
YourLibraryModule::class
])
@Singleton
interface AppComponent : AndroidInjector<App> {
@Component.Builder
interface Builder {
@BindsInstance
fun app(app: Application): Builder
@BindsInstance
fun context(context: Context): Builder
fun build(): AppComponent
}
}
3.在你的图书馆某处注入它
@Inject @Named("foo") lateinit var foo: String
而已。
为简单起见,省略了 Base Dagger 实现代码。