我们有一个多模块的android项目,我们开始将其重构为一个具有多个模块的kotlin-multiplatform项目,以便与我们的iOS应用共享。
我们的多平台项目目前具有4个模块:域,演示,数据和共享应用。 shared-app模块取决于其他三个模块,这是导入到旧android项目中的模块。我们将模块合并为一个模块,仅为iOS项目生成一个框架。
两个项目都成功构建。但是,如果我们检索在共享应用程序模块中定义的接口实例,该接口实例使用子模块中的类型,则IDE的返回类型将显示[ERROR:SomeType]。
在我们旧的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无效,并且可以解析)
如果我可以解释:
-------
- ios -
-------
|
----------
- shared - ---------
---------- \
| \ \
-------- ---------- ----------------
- data - - domain - - presentation -
-------- ---------- ----------------
如果shared
是单入口点,则应通过标头公开相关类型。这类内容中最棘手的部分是,您需要domain
之类的东西,但不包含在共享的公共通话中。如果不是这种情况,那么您正在执行的操作应该可以。如果您发布了构建配置,将会很有帮助,因此我们可以看到如何配置依赖项。另外,这在命令行上是否有效?有时IDE无法正常工作,但是构建正常。
而且,这是Intellij还是Android Studio,是什么版本? Intellij倾向于有关KMP的最新信息。