首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin MultiPlatform -发布Android库失败

Kotlin MultiPlatform -发布Android库失败
EN

Stack Overflow用户
提问于 2020-11-10 19:36:17
回答 1查看 1.2K关注 0票数 6

我试图发布一个安装了新的Kotlin MultiPlatform的Android库(调试/发布)。Im能够成功地发布iOS框架,但不能发布安卓库。这是我最后得到的错误:

配置项目':shared‘时出现问题。

未能通知项目评估侦听器。Kotlin ' Android‘试图为不是库变体或不存在的Android构建变体设置发布:* release *调试检查'publishLibraryVariants’属性,它应该指向现有的Android库变体。不支持发布应用程序和测试变体。

但是,我可以清楚地看到我的Android中的变体。我还可以从Android运行Android/IOS应用程序,使用库依赖关系作为项目依赖implementation(project(":shared"))

只有在尝试发布时才会遇到问题。

这是我的build.gradle.kts:

代码语言:javascript
复制
plugins {
    kotlin("multiplatform")
    kotlin("plugin.serialization")
    id("com.android.library")
    id("kotlin-android-extensions")
    id("com.squareup.sqldelight")
    id("dev.icerock.mobile.multiplatform-resources")
    `maven-publish`
}

group = "com.sekhar.testkmp"
version = "0.1"
val coroutinesVersion = "1.3.9-native-mt"
val serializationVersion = "1.0.0-RC"
val ktorVersion = "1.4.0"
val sqlDelightVersion: String by project

repositories {
    gradlePluginPortal()
    google()
    jcenter()
    mavenCentral()
}

kotlin {
    android {
        publishLibraryVariants("release", "debug")
    }
    ios {
        binaries {
            framework {
                baseName = "shared"
            }
        }
    }
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion")

                implementation("io.ktor:ktor-client-core:$ktorVersion")
                implementation("io.ktor:ktor-client-serialization:$ktorVersion")

                implementation("com.squareup.sqldelight:runtime:$sqlDelightVersion")
                implementation("dev.icerock.moko:resources:0.13.1")
                implementation("dev.icerock.moko:parcelize:0.4.0")
                implementation("dev.icerock.moko:graphics:0.4.0")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("com.google.android.material:material:1.2.1")

                implementation("io.ktor:ktor-client-android:$ktorVersion")
                implementation("com.squareup.sqldelight:android-driver:$sqlDelightVersion")
            }
        }
        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.12")
            }
        }
        val iosMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-ios:$ktorVersion")
                implementation("com.squareup.sqldelight:native-driver:$sqlDelightVersion")
            }
        }
        val iosTest by getting
    }
}

dependencies {
    commonMainApi("dev.icerock.moko:resources:0.13.1")
}

multiplatformResources {
    multiplatformResourcesPackage = "com.sekhar.testkmp" // required
}

android {
    compileSdkVersion(29)
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig {
        minSdkVersion(24)
        targetSdkVersion(29)
        versionCode = 1
        versionName = "1.0"
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
        }
        getByName("debug") {
            isMinifyEnabled = false
        }
    }
    lintOptions {
        isAbortOnError = false
    }
}

val packForXcode by tasks.creating(Sync::class) {
    group = "build"
    val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
    val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from({ framework.outputDirectory })
    into(targetDir)
}

tasks.getByName("build").dependsOn(packForXcode)```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 21:16:48

最常见的解决方案是在android多平台插件:kotlin("multiplatform")之前应用kotlin plugin:id("com.android.library")

代码语言:javascript
复制
plugins {
    id("com.android.library")
    kotlin("multiplatform")
    kotlin("plugin.serialization")
    id("kotlin-android-extensions")
    id("com.squareup.sqldelight")
    id("dev.icerock.mobile.multiplatform-resources")
    `maven-publish`
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64775638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档