Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 渐变依赖项未与依赖模块共享 上下文_Android_Gradle_Koin - Fatal编程技术网

Android 渐变依赖项未与依赖模块共享 上下文

Android 渐变依赖项未与依赖模块共享 上下文,android,gradle,koin,Android,Gradle,Koin,我的项目中有两个模块: Java/Kotlin模块common Android/Kotlin模块app common依赖于,这是一个用于依赖项注入的Kotlin库: dependencies { implementation 'org.koin:koin-core:1.0.2' } 用法示例: class MyPresenter: KoinComponent { ... } class MyFragment { private val presenter = MyPresen

我的项目中有两个模块:

  • Java/Kotlin模块
    common
  • Android/Kotlin模块
    app
common
依赖于,这是一个用于依赖项注入的Kotlin库:

dependencies {
  implementation 'org.koin:koin-core:1.0.2'
}
用法示例:

class MyPresenter: KoinComponent {
  ...
}
class MyFragment {
  private val presenter = MyPresenter()
}
app
不依赖于Koin库,因为我不需要在Android代码中注入任何东西,所有注入都在公共代码中(演示者、拦截器等)

但是
应用程序
依赖于
通用

dependencies {
  implementation project(':common')
}
用法示例:

class MyPresenter: KoinComponent {
  ...
}
class MyFragment {
  private val presenter = MyPresenter()
}

问题 我可以编译
common
,我可以在
common
中运行单元测试,但是当我尝试编译
app
时,我得到以下错误:

无法解析以下类的超类型。请做 确保在类路径中具有所需的依赖项: 类xxx.common.presenter.MyPresenter,未解析的超类型:org.koin.standalone.KoinComponent

当我运行
/gradlew:app:dependencies

debugCompileClasspath
+--- project :common
debugRuntimeClasspath
+--- project :common
|    +--- org.koin:koin-core:1.0.2
依赖项在
运行时
配置中,但在
编译
配置中缺失


到目前为止,我所尝试的: 显然,我不想在
app
中声明Koin依赖项,因此我尝试了几种方法:

更改
api
的依赖项:

dependencies {
  api 'org.koin:koin-core:1.0.2'
}
不工作-我得到了与
实现
完全相同的依赖关系树

更改项目依赖项配置:

dependencies {
  implementation project(path: ':common', configuration: `compile`)
}
不工作-我不确定这一点,但我希望它能在
编译
配置中获得
通用
的依赖项

更改
编译的依赖项:

dependencies {
  compile 'org.koin:koin-core:1.0.2'
}
工作依赖项出现在
debugCompileClasspath
中,我可以运行
应用程序


问题 现在我很困惑:

  • 由于
    app
    不直接使用Koin,我认为它不需要依赖项。为什么会这样?是因为
    MyPresenter
    的静态类型是
    KoinComponent
  • 我认为
    api
    与不推荐的
    compile
    是一样的。似乎不是
  • 除了使用不推荐的
    编译
    ,还有其他方法吗
      • 因为您使Koin类型出现在common的api中,所以common的使用者需要了解Koin类型。它们实际上成为API
      • api
        配置是您应该使用并且应该工作的
      • 最可能的解释是,一方的Android/Kotlin项目和另一方的Java/Kotlin项目对什么是
        api
        有不同的定义,如何构建或访问可消费配置
        apiElements
        ,或者
      为了调试它,我建议创建一个简单的项目来重现问题,并且可以共享,因为android或kotlin插件中可能有一个bug