1

我正在制作一个私有的 Kotlin 多平台库,该库将位于 Bitbucket 上托管的私有仓库中。

我的库依赖于另一个库,称为 Krypto。

因此,自然地,我在库的公共模块中有以下依赖项:

val commonMain by getting {
    dependencies {
        api("com.soywiz.korlibs.krypto:krypto:2.2.0")
    }
}

现在,当我通过 Cocoapods 将库导入 iOS 项目时,它工作得非常好。但是,当我将 .jar 文件作为依赖项插入到我的 Android 项目中时:

implementation files('libs/MyLibrary-jvm-1.0.0.jar')

它可以编译,但在运行时崩溃并出现以下错误:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/soywiz/krypto/SHA256Kt

如果我将 Krypto 依赖项添加到我的 Android 项目中,一切正常,但是我希望这些依赖项已经包含在我的库中。怎么做?

我还尝试添加 java-library 插件并在 java 构建块中添加依赖项,但它没有改变任何东西。

4

1 回答 1

0

解决方案一直在文档中...... https://kotlinlang.org/docs/multiplatform-b​​uild-native-binaries.html#export-dependencies-to-binaries

在特定平台的二进制文件的 Gradle 配置中,我们需要使用export()来包含依赖项。为了还包括依赖项的依赖项,我们需要执行export(dep, transitiveExport = true)

kotlin {
    sourceSets {
        commonMain by getting {
            dependencies {
                api(project(":dependency"))
            }
        }
    }
    java().binaries {
        framework {
            export(project(":dependency"), transitiveExport = true)
        }
    }
}
于 2022-03-04T18:36:38.493 回答