Cot*_*tel 5 android gradle kotlin kotlin-multiplatform kotlin-multiplatform-mobile
我有一个其他 KMM 项目正在使用的 Kotlin 多平台库。我正在尝试构建这些 KMM 项目之一的 iOS 应用程序,但首先我需要将库二进制文件发布到 Maven 存储库。
Unresolved reference
当尝试构建 iOS ARM 64 二进制文件时,我正在使用的库之一失败了。它仅在 gradle task 上失败compileIosMainKotlinMetadata
,构建项目工作完美,但由于此错误,我无法生成二进制文件。
这是我常见的多平台 lib 设置 gradle:( kotlin-multiplatform-lib-setup
)
plugins {
kotlin("multiplatform")
id("com.android.library")
}
kotlin {
android {
publishAllLibraryVariants()
}
ios()
sourceSets {
commonTest {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val androidTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("junit:junit:4.13.2")
}
}
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
}
android {
compileSdkVersion(31)
defaultConfig {
minSdkVersion(23)
targetSdkVersion(31)
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
sourceSets {
named("main") {
manifest.srcFile("src/androidMain/AndroidManifest.xml")
res.srcDirs("src/androidMain/res")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在开发的模块的 build.gradle.kts:
plugins {
id("kotlin-multiplatform-lib-setup")
id("publish-setup")
}
publishing {
publications.withType<MavenPublication> {
groupId = "${Constants.artifactGroup}.architecture"
artifactId = "core"
version = Constants.artifactVersion
}
}
kotlin {
ios()
sourceSets {
commonMain {
dependencies {
implementation(Deps.Badoo.reaktive)
implementation(Deps.Badoo.coroutinesInterop)
implementation(Deps.KotlinX.Coroutines.core)
implementation(Deps.uuid)
}
}
commonTest {
dependencies {
implementation(Deps.Badoo.reaktive)
implementation(Deps.KotlinX.Coroutines.core)
implementation(Deps.Badoo.reaktiveTesting)
}
}
iosMain {
dependencies {
implementation(Deps.Badoo.reaktive)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也测试过添加没有结果
kotlin {
ios {
binaries {
framework {
export(Deps.Badoo.reaktive)
transitiveExport = true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
默认情况下,模块的 build.gradle 中不提供 iosMain 源集。因此,不要添加ios()
到源集,而是添加三个 iOS 配置
iosX64()
iosArm64()
iosSimulatorArm64()
Run Code Online (Sandbox Code Playgroud)
并且不只是为 iosMain 提供依赖项,而是包含所有配置
iosMain {
dependencies {
implementation(Deps.Badoo.reaktive)
}
}
Run Code Online (Sandbox Code Playgroud)
改为这样做,
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
dependencies {
implementation(Deps.Badoo.reaktive)
}
}
Run Code Online (Sandbox Code Playgroud)
这样,它添加了一个新的通用依赖源集来处理所有 iOS 配置。
归档时间: |
|
查看次数: |
1615 次 |
最近记录: |