Kotlin多平台库接口的公开类型未解析

问题描述 投票:1回答:1

我们有一个多模块的android项目,我们开始将其重构为一个具有多个模块的kotlin-multiplatform项目,以便与我们的iOS应用共享。

我们的多平台项目目前具有4个模块:域,演示,数据和共享应用。 shared-app模块取决于其他三个模块,这是导入到旧android项目中的模块。我们将模块合并为一个模块,仅为iOS项目生成一个框架。

两个项目都成功构建。但是,如果我们检索在共享应用程序模块中定义的接口实例,该接口实例使用子模块中的类型,则IDE的返回类型将显示[ERROR:SomeType]。

enter image description here

在我们旧的android项目settings.gradle中,我们使用includeBuild(mpp-project)并在mpp-project中为shared-app模块创建了依赖项替换。

enableFeaturePreview("GRADLE_METADATA")

includeBuild("mpp-project") {
    dependencySubstitution {
        substitute(module("our.package.name:shared")).with(project(":shared-app"))
    }
}

另一方面,我们所有公开的和可传递的导入类型都可以在旧的android项目中实例化,甚至可以从子模块中实例化。 (例如,我可以使SomeType无效,并且可以解析)

android gradle kotlin multi-module kotlin-multiplatform
1个回答
0
投票

如果我可以解释:

   -------
   - ios -
   -------
      |
   ----------
   - shared - ---------
   ----------          \
       |      \         \
   -------- ---------- ----------------
   - data - - domain - - presentation -
   -------- ---------- ----------------

如果shared是单入口点,则应通过标头公开相关类型。这类内容中最棘手的部分是,您需要domain之类的东西,但不包含在共享的公共通话中。如果不是这种情况,那么您正在执行的操作应该可以。如果您发布了构建配置,将会很有帮助,因此我们可以看到如何配置依赖项。另外,这在命令行上是否有效?有时IDE无法正常工作,但是构建正常。

而且,这是Intellij还是Android Studio,是什么版本? Intellij倾向于有关KMP的最新信息。

© www.soinside.com 2019 - 2024. All rights reserved.