【问题标题】:Kotlin Multiplatform library unresolved dependency at runtimeKotlin Multiplatform 库在运行时未解决的依赖关系
【发布时间】:2021-07-28 13:25:35
【问题描述】:

我正在制作一个私有的 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 构建块中添加依赖项,但它没有改变任何东西。

【问题讨论】:

    标签: gradle dependencies kotlin-multiplatform kotlin-multiplatform-mobile


    【解决方案1】:

    解决方案一直在文档中...https://kotlinlang.org/docs/multiplatform-build-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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2020-10-07
      • 2020-01-20
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多