作为 Gradle 项目集成到 Android 应用程序中时,KMM 项目上缺少公共类

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

我有一个现有的 Android 应用程序,我喜欢将 KMM 库项目集成为 git 子模块。我们希望在本地构建上集成 git 子模块,并在 CI 构建上使用 Maven 存储库依赖项。

为了实现这一点,我通过

settings.gradle
在我的
includeBuild
中添加了子模块的目录,并替换了特定模块的所有依赖项:

includeBuild('my-kmm-library-project') {
    dependencySubstitution {
        substitute module('com.example.any-kmm-artifact:any') using project(':any')
    }
}

添加

implementation 'com.example.any-kmm-artifact:any:1.0.0'

我的应用程序

build.gradle
文件允许访问 android 源集中子模块
/my-kmm-library-project/any/src/androidMain
中的所有类和包。但我无法选择从
commonMain
源集中导入“类”。我已经尝试让
androidMain
依赖于
commonMain.

kmm/build.gradle.kts:

val androidMain by getting {
    dependsOn(commonMain)
    ...

}

这不会带来任何成功。

我还尝试在 KMM 项目上添加

jvm()
目标并让
jvmMain
依赖于
androidMain
,但这会产生编译错误,导致 Android SDK 类无法解析。

我认为主要问题是,类只是编译到可以组装的aar中。但该模块已集成为 gradle 项目实现。

是否有 KMM 选项来编译“公共类”并通过 gradle 模块访问它们?

android gradle git-submodules kotlin-multiplatform kmm
1个回答
0
投票

“但是我无法选择从 commonMain 源集中导入“类””

在 Android 项目中,将 KMM 库包含为 *.aar 后。

您只需从 KMM 库的 /androidMain(而不是 /commonMain)正确导入*使用“类”

因此,使用这种方式

expect - actual
方法进行继承

  • /commonMain:期望方法

  • /androidMain:实际方法

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