标签: kotlin-multiplatform

应用插件请求时发生异常[id:'org.jetbrains.kotlin.jvm', version:'1.3.40-eap-40']

An exception occurred applying plugin request [id: 'org.jetbrains.kotlin.jvm', version: '1.3.40-eap-40']
> Failed to apply plugin [id 'org.jetbrains.kotlin.jvm']
  > Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
Run Code Online (Sandbox Code Playgroud)

这个错误发生在我的 build.gradle.kts 文件中

您是否碰巧在根据 Kotlin/Native GitHub 上提供的示例构建的 Kotlin Cocoapods 项目中看到此错误?

kotlin cocoapods kotlin-native kotlin-multiplatform

1
推荐指数
1
解决办法
4801
查看次数

如何在保持 Kotlin 结构化并发能力的同时使用 actor?

我有一个类,它使用actor来确保共享可变状态的线程安全。我为此做了一个小包装actor以使其易于使用:

interface Ref<T : Any> {

    fun get(): T

    fun transform(transformer: (T) -> T): Job

}
Run Code Online (Sandbox Code Playgroud)

这里get用于runBlocking阻塞,直到它获取 的实际值T

override fun get(): T = runBlocking {
    val deferred = CompletableDeferred<T>()
    launch {
        actor.send(RefOperation.Get(deferred))
    }
    deferred.await()
}
Run Code Online (Sandbox Code Playgroud)

并在transform没有的情况下做类似的事情runBlocking,只返回一个Job

override fun transform(transformer: (T) -> T): Job {
    val job = Job()
    launch {
        actor.send(RefOperation.Transform(transformer, job))
    }
    return job
}
Run Code Online (Sandbox Code Playgroud)

这很好,直到一个transform调用指向另一个调用:

ref.transform {

  ...
  ref.transform { …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform kotlin-coroutines

1
推荐指数
1
解决办法
153
查看次数

toJson 和 fromJson 跨平台支持

我有一个用 Kotlin 编写的 Android 应用程序。我有许多类,对于每个类,我都会使用这些类的Gson's toJson函数fromJson。例如:

class A{

fun toJson():String {
        return Gson().toJson(this)
    }

fun fromJson(jsonString:String):A{
            return Gson().fromJson(jsonString, A::class)
   }
}
Run Code Online (Sandbox Code Playgroud)

我还有另一堂课B

class B{
    
    fun toJson():String {
            return Gson().toJson(this)
        }
    
    fun fromJson(jsonString:String):B{
                return Gson().fromJson(jsonString, B::class)
       }
    }
Run Code Online (Sandbox Code Playgroud)

我使用的方法是创建该类的实例,然后调用该方法(注意:我正在class A另一个类中创建该类的实例 ():

val a = A()    
a.toJson()
Run Code Online (Sandbox Code Playgroud)

但我现在正在尝试将其转换为 kotlin 多平台项目,但不确定如何在 kotlin 多平台中进行to和json 转换。from

我尝试创建期望函数,如下所示:

expect fun toJsonClassA():String
expect fun fromJsonClassA(jsonString: String): A

class A{

}
Run Code Online (Sandbox Code Playgroud)

然后实现它们的实际实现如下:

actual fun toJsonClassA(): String { …
Run Code Online (Sandbox Code Playgroud)

android json kotlin kotlin-multiplatform

1
推荐指数
1
解决办法
2000
查看次数

Kotlin 多平台移动代码与 iOS 平台上编译的 Swift 代码不同吗?

根据文档

Kotlin/Native 是一种将 Kotlin 代码编译为原生二进制文件的技术,无需虚拟机即可运行。它是一个基于 LLVM 的 Kotlin 编译器后端和 Kotlin 标准库的本机实现。

因此 K/N 使用 LLVM 将 Kotlin 代码编译为 iOS 的本机代码。Swift编译器还使用LLVM来优化和生成机器代码

  • 那么在 iOS 平台上编译的 K/N 代码与编译的 Swift 代码有什么区别吗?

    • 如果是的话,这些差异是什么?性能等

ios kotlin swift kotlin-native kotlin-multiplatform

1
推荐指数
1
解决办法
627
查看次数

Kodein + Ktor = 冻结 kotlin.collections.HashMap 的突变尝试 - 为什么?

最近几天,我一直在为这个例外而苦苦挣扎。

我有一个具有这些依赖项的 kotlin 多平台项目:

  • 科特林 = 1.5.10
  • 编码=7.6.0
  • ktor=1.6.0(内部使用 kotlin 协程 1.5.0-native-mt)

在尝试在本机中使用 httpClient 时,我一直被提到异常:

    at kotlin.Throwable#<init>(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/Throwable.kt:23)
    at kotlin.Exception#<init>(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/Exceptions.kt:23)
    at kotlin.RuntimeException#<init>(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/Exceptions.kt:34)
    at kotlin.native.concurrent.InvalidMutabilityException#<init>(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/native/concurrent/Freezing.kt:22)
    at <global>.ThrowInvalidMutabilityException(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/native/concurrent/Internal.kt:93)
    at <global>.MutationCheck(Unknown Source)
    at kotlin.collections.HashMap.<set-length>#internal(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/collections/HashMap.kt:16)
    at kotlin.collections.HashMap#addKey(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/collections/HashMap.kt:292)
    at kotlin.collections.HashMap#put(/Users/teamcity3/buildAgent/work/290aee0e088a1666/runtime/src/main/kotlin/kotlin/collections/HashMap.kt:68)
    at org.kodein.di.internal.DITreeImpl#find(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/internal/DITreeImpl.kt:132)
    at org.kodein.di.DITree#find$default(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/DITree.kt:36)
    at org.kodein.di.internal.DIContainerImpl#factory(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/internal/DIContainerImpl.kt:158)
    at org.kodein.di.DIContainer#factory$default(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/DIContainer.kt:32)
    at org.kodein.di.DIContainer#provider(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/DIContainer.kt:76)
    at org.kodein.di.DIContainer#provider$default(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/DIContainer.kt:75)
    at org.kodein.di.internal.DirectDIBaseImpl#Instance(/Users/runner/work/Kodein-DI/Kodein-DI/kodein-di/src/commonMain/kotlin/org/kodein/di/internal/DirectDIImpl.kt:30)
    at InvalidMutabilitySampleTest.<init>$lambda-6$lambda-5$lambda-4$lambda-3$lambda-2#internal(/Users/r.juszczyk/StudioProjects/lmhu-multiplatform-app/MultiplatformApp/src/iosTest/kotlin/InvalidMutabilitySampleTest.kt:26)
    at InvalidMutabilitySampleTest.$<init>$lambda-6$lambda-5$lambda-4$lambda-3$lambda-2$FUNCTION_REFERENCE$3.invoke#internal(/Users/r.juszczyk/StudioProjects/lmhu-multiplatform-app/MultiplatformApp/src/iosTest/kotlin/InvalidMutabilitySampleTest.kt:25)
    at InvalidMutabilitySampleTest.$<init>$lambda-6$lambda-5$lambda-4$lambda-3$lambda-2$FUNCTION_REFERENCE$3.$<bridge-UNNN>invoke(/Users/r.juszczyk/StudioProjects/lmhu-multiplatform-app/MultiplatformApp/src/iosTest/kotlin/InvalidMutabilitySampleTest.kt:25)
    at io.ktor.client.HttpClientConfig.install$<anonymous>_1#internal(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:69)
    at io.ktor.client.HttpClientConfig.$install$<anonymous>_1$FUNCTION_REFERENCE$17.invoke#internal(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:65)
    at io.ktor.client.HttpClientConfig.$install$<anonymous>_1$FUNCTION_REFERENCE$17.$<bridge-UNNN>invoke(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:65)
    at io.ktor.client.features.json.JsonFeature.Feature#prepare(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-features/ktor-client-json/common/src/io/ktor/client/features/json/JsonFeature.kt:129)
    at io.ktor.client.HttpClientConfig.install$<anonymous>_1-2#internal(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:77)
    at io.ktor.client.HttpClientConfig.$install$<anonymous>_1-2$FUNCTION_REFERENCE$18.invoke#internal(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:74)
    at io.ktor.client.HttpClientConfig.$install$<anonymous>_1-2$FUNCTION_REFERENCE$18.$<bridge-UNNN>invoke(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:74)
    at io.ktor.client.HttpClientConfig#install(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClientConfig.kt:97)
    at io.ktor.client.HttpClient#<init>(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClient.kt:172)
    at io.ktor.client.HttpClient#<init>(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClient.kt:81)
    at io.ktor.client#HttpClient(/Users/administrator/Documents/agent/work/8d547b974a7be21f/ktor-client/ktor-client-core/common/src/io/ktor/client/HttpClient.kt:43)
Run Code Online (Sandbox Code Playgroud)

我设法在测试中重现了该崩溃:

class InvalidMutabilitySampleTest { …
Run Code Online (Sandbox Code Playgroud)

kotlin kodein ktor kotlin-native kotlin-multiplatform

1
推荐指数
1
解决办法
479
查看次数

Jetpack Compose Desktop 有没有办法向窗口添加高度?如何设置窗口的最小尺寸?

我在浏览 compose 桌面教程时遇到问题。

我有两个关于撰写桌面基础知识的问题。

首先,有没有办法为整个窗户添加标高?

其次,有没有办法设置窗口的最小尺寸? 当我单击窗口边缘时,即使没有显示任何箭头,也可以调整窗口大小,但我找不到对其最小尺寸添加约束的方法。它会闪烁直至消失。

我当前的预览如下所示。

在此输入图像描述

我的代码看起来像这样。

fun main() = application {

val windowState = rememberWindowState()
windowState.size = WindowSize(392.dp, 642.dp)

var isVisible by remember { mutableStateOf(true) }

val trayState = rememberTrayState()

Tray(
    state = trayState,
    icon = TrayIcon,
    hint = "PickMessengerV2",
    onAction = {
        isVisible = true
    },
    menu = {
        Item(
            "Exit",
            onClick = {
                exitApplication()
            }
        )
    }
)

Window(
    onCloseRequest = {
        isVisible = false
    },
    state = windowState,
    undecorated = true,
    resizable …
Run Code Online (Sandbox Code Playgroud)

kotlin-multiplatform android-jetpack-compose

1
推荐指数
1
解决办法
2267
查看次数

无法在 Kotlin Multiplatform 中使用字体

很简单;刚刚通过向导创建了一个 Compose Multiplatform 项目。

继续创建主题;但我想使用相同的字体,所以我poppins.ttfcommonMain/resources/font/.

然后我在模块中声明了以下内容commonMain

expect val projectFontFamily: FontFamily
Run Code Online (Sandbox Code Playgroud)

在我使用的模块上commonDesktop

actual val projectFontFamily: FontFamily = FontFamily(
  Font("font/poppins.ttf")
)
Run Code Online (Sandbox Code Playgroud)

太棒了,成功了。从今起commonAndroid

actual val projectFontFamily: FontFamily = FontFamily(
  Font(R.font.poppins)
)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,该类R未正确生成,我无法使用R.font.poppins.

如果我将“资源”重命名为“res”并将字体推入其中,res/font/那么它就可以工作。(但我只是复制了字体文件)。

我该如何解决这个问题?

kotlin android-resources kotlin-multiplatform android-jetpack-compose compose-multiplatform

1
推荐指数
1
解决办法
1555
查看次数

将 kotlinx-datetime 添加到我的 Kotlin 多平台应用程序会破坏 iOS 构建

我能够在 Android 和 iOS 中成功运行 Android Studio 生成的示例应用程序。我在向导步骤中选择了 CocoaPods。

但是当我将kotlinx-datetime添加到我的依赖项中时,我只能运行 Android 版应用程序。

我的 build.gradle.kts :

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.0")
            }
        }
    ...

Run Code Online (Sandbox Code Playgroud)

添加库时出现以下错误:

> Task :shared:linkDebugFrameworkIosX64 FAILED
e: Compilation failed: Expecting descriptor for kotlin.time/TimeMark.<init>|-5645683436151566731[0]

 * Source files: 
 * Compiler version info: Konan: 1.7.0 / Kotlin: 1.7.20
 * Output kind: STATIC_CACHE

e: java.lang.IllegalStateException: Expecting descriptor for kotlin.time/TimeMark.<init>|-5645683436151566731[0]
Run Code Online (Sandbox Code Playgroud)

如何重现:

  1. 使用 AS 创建 KMM 示例应用程序。
  2. 将库:implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.0")添加到 build.gradle.kts 中的 commonMain
  3. 尝试以任何方式使用/导入/打印 LocalDate

有什么想法如何解决这个问题吗?

android kotlin kotlin-multiplatform kmm

1
推荐指数
1
解决办法
2895
查看次数

Kotlin 多平台移动 ktor 日志记录不在 logcat 中显示请求参数

我正在尝试使用 ktor 日志记录查看 httpRequest 参数、标头、响应等的日志,但我在 logcat 中看不到任何日志:(

代码块如下所示:

private val httpClient = HttpClient {
    install(ContentNegotiation) {
        json(
            Json {
                prettyPrint = true
                ignoreUnknownKeys = true
                useAlternativeNames = false
            }
        )

        install(Logging) {
            logger = Logger.DEFAULT
            level = LogLevel.ALL
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你有什么建议吗 ?

** 使用库:

val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
                implementation("io.ktor:ktor-client-core:$ktorVersion")
                implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
                implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
                implementation("io.ktor:ktor-client-logging:$ktorVersion")
            }
        }
Run Code Online (Sandbox Code Playgroud)

ktor kotlin-multiplatform

1
推荐指数
1
解决办法
652
查看次数

kotlin 1.2 中没有 kotlin.Math 类,如文档中所述

我最近一直在处理 kotlin 多平台,我完全理解开发的本质。最初,我有自己期望的 Math 类(在一个公共模块中),并且在 JS 和 JVM 环境中有实际的类。

由于我喜欢阅读文档,我发现自 kotlin 1.2 以来,数学库已添加到标准库中。这给我带来了麻烦,因为我使用 kotlin 1.2.51 并且我在尝试从 kotlin.Math 访问我的公共模块和任何平台特定模块中的类时出错。

我没有得到什么?如何访问通用模块中的 kotlin.Math 类?

kotlin kotlin-multiplatform

0
推荐指数
1
解决办法
3738
查看次数

如何在 Ktor 中设置类似于 Retrofit 的`Retrofit.Builder().baseUrl(baseUrl) 的 basePath?

我正在尝试Ktor通过转换一些当前正在使用的现有项目Retrofit

虽然我可以轻松地将请求转换为类似的内容:

client.get {
    url("$BASE_URL/something/somepage/another")
}
Run Code Online (Sandbox Code Playgroud)

$BASE_URL每次都添加到所有路径似乎很乏味。在改造中,我们可以简单地执行以下操作:

Retrofit.Builder()
    .baseUrl(BASE_URL)
    .create(SomeServiceClass::class.java)
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用defaultRequest和设置BASE_URL那里,但显然你只能设置url.host而不是整个basePath.

有没有办法在 中做同样的事情Ktor?或者如果没有,处理这个问题的最佳做法是什么?

android kotlin ktor kotlin-multiplatform ktor-client

0
推荐指数
2
解决办法
888
查看次数

在 Gradle 中使用来自 Kotlin/Native 的 Apple 依赖项,更具体地说是 SwiftUI

如何在 Kotlin/Native 或 Kotlin Multiplatform 项目中使用 Gradle 将 Apple 依赖项添加到 Kotlin/Native 模块?

我不熟悉 Apple 和 Xcode 开发——我写了一点 Swift,但没有为 Xcode 项目配置额外的依赖项,所以如果我在这里有新手误解,请见谅。

Kotlin/Native 可与 Objective-C 和 Swift 互操作。在我在线浏览的许多示例项目中,Kotlin 被设置为用作 Apple (iOS) 模块的共享库。但是 Apple 依赖项中的定义可以从 Kotlin 代码中调用也应该是有意义的,就像 Java Maven 依赖项可以添加到 Gradle 构建脚本然后由 Kotlin 代码调用一样。

名称翻译部分,它说:

platform.* 预配置系统框架的包

在使用 IntelliJ IDEA 中的 Kotlin 多平台移动应用程序选项创建的项目中,此类定义包含在模块中模块文件夹中的platform包下。iosMainkotlinshared

但是,SwiftUI 不存在。更具体地说,就我而言,我尝试使用 SwiftUI 在 Kotlin 中直接构建 UI。目前是否有可能,然后如何使 SwiftUI“系统框架”也包括在内?

这是我build.gradle.ktsshared模块中的参考:

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

plugins {
    kotlin("multiplatform") version "1.4.30"
}

group …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin kotlin-native kotlin-multiplatform swiftui

0
推荐指数
1
解决办法
103
查看次数

okhttp4 准备好用于 Kotlin Multiplatform Mobile 了吗?

可以不使用例如ktorwithokhttp作为引擎,而是直接使用okhttp4它仅在 Kotlin 中构建吗?

kotlin okhttp ktor kotlin-multiplatform

-3
推荐指数
1
解决办法
392
查看次数