我正在尝试在我的共享代码中使用Android日志,所以我想利用'expected/actual‘功能来让android端使用日志在log cat中读取。然而,我无法获得安卓模块(不是应用程序模块)来导入android.util.Log。
我看过this回答,但它对我不起作用。我无法获取要解析的导入。
我认为我需要实现一个特定的依赖项才能访问导入,但我不确定那是什么。
这是我的build.gradle.kts
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform")
}
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 = "SharedCode"
}
}
}
jvm("android")
sourceSets["commonMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
implementation("io.ktor:ktor-client:1.0.0-beta-3")
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2")
// implementation ("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0")
}
sourceSets["androidMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib") //Allows _androidMain to have java imports
implementation("io.ktor:ktor-client-android:1.0.0-beta-3")
api("org.jetbrains.kotlin:kotlin-stdlib:1.3.61")
api("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61")
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61")
}
}
val packForXcode by tasks.creating(Sync::class) {
val targetDir = File(buildDir, "xcode-frameworks")
/// selecting the right configuration for the iOS
/// framework depending on the environment
/// variables set by Xcode build
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val framework = kotlin.targets
.getByName<KotlinNativeTarget>("ios")
.binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
from({ framework.outputDirectory })
into(targetDir)
/// generate a helpful ./gradlew wrapper with embedded Java path
doLast {
val gradlew = File(targetDir, "gradlew")
gradlew.writeText("#!/bin/bash\n"
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
+ "cd '${rootProject.rootDir}'\n"
+ "./gradlew \$@\n")
gradlew.setExecutable(true)
}
}
tasks.getByName("build").dependsOn(packForXcode)发布于 2019-12-11 19:43:45
这里你得到的JVM target的名字是" Android“,而不是实际的Android target。链接的问题中也出现了同样的问题。当你使用答案中的脚本时,你能说出发生了什么吗?它看起来应该可以正常工作。
正如documentation中所描述的,必须使用安卓特定的Gradle插件才能使安卓目标可用。如果你想知道如何做到这一点,可以考虑看看this sample。
发布于 2019-12-16 19:25:20
我也有同样的问题。尝试使用android(),而不仅仅是jvm("android")。
此外,我还使用android.sourceSets.foreach{ _ -> dependencies{ ... } }将依赖项添加到安卓系统中
发布于 2020-03-29 15:25:04
只是修复了同样的问题,最后使用了这个教程的https://medium.com/icerock/how-to-start-use-kotlin-multiplatform-for-mobile-development-1d3022742178,所以我的build.gradle看起来像这样:
apply plugin: 'com.android.library'
apply plugin: 'org.jetbrains.kotlin.multiplatform'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 14
targetSdkVersion 29
}
}
kotlin {
targets {
android()
iosArm64()
iosX64()
}
sourceSets {
commonMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
}
}
androidMain {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
}
}
}https://stackoverflow.com/questions/59283752
复制相似问题