我在一个android项目中创建了两个模块。
现在,app模块有许多java类。我想在库模块中访问app模块的.Java class。
模块应用程序在包xyz中有一个类DatabaseHelper。
现在,我想在DatabaseHelper模块中导入类Library。
安卓系统不承认DatabaseHelper。
问题,
可以将类从应用程序模块导入到另一个模块吗?
任何其他方式。
MyFiles
build.gradle(app)
compile project(':materialList')setting.gradle
include ':app', ':Library'发布于 2017-11-14 22:21:32
可以将类从应用程序模块导入到另一个模块吗?
这是不可能的,因为这将创建一个循环依赖。
然而,在这个场景中可以使用模式:
libraryapp模块中)使用一些依赖注入框架(如Dagger ),这将变得更加简单,您可以在@Module类中指定接口提供程序,并在任何地方使用来自公共提供程序的注入数据。
发布于 2016-11-15 12:18:34
不,不可能。重新考虑你的设计。也许把DatabaseHelper搬到library项目中去?
在您的设计中,app模块和library模块之间将存在一个循环依赖关系。
其他模块的目的是分离完全独立的代码,并将它们移动到外部位置。并在另一个模块中使用。
发布于 2020-11-20 14:14:43
这是一个很老的问题,我相信作者找到了一个解决办法,但我认为这个问题缺乏许多人想知道的答案。
因此,实际上,正如在其他答案中所建议的那样,这通常是由您的体系结构问题引起的。
但有时这可能是合理的。例如,如果您需要访问库中的应用程序id,或者在许多其他情况下。
因此,如果您需要访问库模块中的应用程序模块中的资源,
它可以很容易地通过依赖注入.来完成。
例如,使用Dagger可以这样做:
1.创建一个将提供共享资源的模块。让我们称它为集成模块。
@Module()
class IntegrationModule {
@Provides
@Named("foo")
fun provideFoo() = "Hey bro"
}2.将其包含在应用程序组件中
@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就这样。
为了简单起见,省略了基本Dagger实现代码。
https://stackoverflow.com/questions/40609547
复制相似问题