在Kotlin多平台库中使用Android库

时间:2019-10-28 09:53:16

标签: android kotlin multiplatform gradle-kotlin-dsl

我分别有三个目标commonMain / androidMain / iOSMain。因为我需要在androidMain模块中访问Android设备中的资产。我发现我无法使用Android API ...以下是我的build.gradle.kts的一部分:

import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    id("com.android.application")
    kotlin("multiplatform")
}
repositories {
    google()
    jcenter()
}

android {
    compileSdkVersion(29)
    buildToolsVersion("29.0.1")
    defaultConfig {
        minSdkVersion(19)
        targetSdkVersion(29)
    }
    sourceSets {
        getByName("main") {
            manifest.srcFile("src/androidMain/AndroidManifest.xml")
            java.srcDirs(file("src/androidMain/kotlin"))
            res.srcDirs(file("src/androidMain/res"))
        }
    }
}

kotlin {
    //select iOS target platform depending on the Xcode environment variables
    val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
        if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true)
            ::iosArm64
        else
            ::iosX64

    iOSTarget("ios") {
        binaries {
            framework {
                baseName = "Example"
            }
        }
    }

    jvm("android")

    sourceSets["commonMain"].dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
    }

    sourceSets["androidMain"].dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib")
    }

    sourceSets["commonTest"].dependencies {
        implementation ("org.jetbrains.kotlin:kotlin-test")
        implementation ("org.jetbrains.kotlin:kotlin-test-junit")
    }
}

如何在androidMain中使用Android库?例如,

val inputStream = assets.open("Test.txt")

2 个答案:

答案 0 :(得分:1)

请确保创建一个AndroidManifest.xml,其(库模块)包名称与SharedCode / src目录下的(app模块)包名称不同。正如Nagy Robi所说,请使用android()而不是jvm('android')。请同时检查以下参考:

答案 1 :(得分:0)

尝试使用android()而非jvm('android')从预设中加载目标。