【问题标题】:Using Android library in Kotlin multiplatform library在 Kotlin 多平台库中使用 Android 库
【发布时间】:2019-10-28 09:53:16
【问题描述】:

我分别有三个目标 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")

【问题讨论】:

  • 也许this段可以帮忙?
  • 我如上更新了 build.gradle.kts。而且我仍然无法在 androidMain 中使用 val inputStream = assets.open("Test.txt") 。我的多平台配置有什么问题?
  • 在您使用的示例中,似乎无法使用 Android SDK。我想,您正在尝试使用this 示例?在那里,SDK 仅适用于 app 模块,不适用于 SharedCode。也许this 的文章可以帮助解决这个问题,请看一下。
  • 是的,我想在 SharedCode 的 androidMain 中使用 Android SDK 而不是应用程序。我已经阅读了您提供的文章,但我仍然无法在 SharedCode 中使用 Android SDK ...您尝试过吗?因为我可以使用 kotlin 多平台 SDK 访问 iOS 的捆绑包,但我无法访问 Android ......这真的很奇怪......我只想从 SharedCode 访问存储。
  • 然后尝试在SharedCode 脚本中添加一个依赖项,就像在app 中一样。另外,我个人推荐你加入 Kotlin Community Slack(获得邀请 here)。有很多 Kotlin/Native 和 MPP 用户,他们可以分享的经验比我多。

标签: android kotlin multiplatform gradle-kotlin-dsl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 是的,我已从 jvm('android') 更改为 android(),但 IDE 产生了另一个错误。它在我的 android 的实际课程中说“功能多平台项目是实验性的,应该明确启用”。 GitHub 中是否有任何使用 android API 作为参考的工作示例?
    • 尝试将enableFeaturePreview('GRADLE_METADATA')添加到您项目的settings.gradle
    猜你喜欢
    • 2021-07-03
    • 2020-03-01
    • 2021-12-22
    • 2019-12-01
    • 2022-07-02
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多