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 项目中看到此错误?
我有一个类,它使用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 编写的 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) 根据文档
Kotlin/Native 是一种将 Kotlin 代码编译为原生二进制文件的技术,无需虚拟机即可运行。它是一个基于 LLVM 的 Kotlin 编译器后端和 Kotlin 标准库的本机实现。
因此 K/N 使用 LLVM 将 Kotlin 代码编译为 iOS 的本机代码。Swift编译器还使用LLVM来优化和生成机器代码。
那么在 iOS 平台上编译的 K/N 代码与编译的 Swift 代码有什么区别吗?
最近几天,我一直在为这个例外而苦苦挣扎。
我有一个具有这些依赖项的 kotlin 多平台项目:
在尝试在本机中使用 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) 我在浏览 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) 很简单;刚刚通过向导创建了一个 Compose Multiplatform 项目。
继续创建主题;但我想使用相同的字体,所以我poppins.ttf把commonMain/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
我能够在 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)
如何重现:
有什么想法如何解决这个问题吗?
我正在尝试使用 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) 我最近一直在处理 kotlin 多平台,我完全理解开发的本质。最初,我有自己期望的 Math 类(在一个公共模块中),并且在 JS 和 JVM 环境中有实际的类。
由于我喜欢阅读文档,我发现自 kotlin 1.2 以来,数学库已添加到标准库中。这给我带来了麻烦,因为我使用 kotlin 1.2.51 并且我在尝试从 kotlin.Math 访问我的公共模块和任何平台特定模块中的类时出错。
我没有得到什么?如何访问通用模块中的 kotlin.Math 类?
我正在尝试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?或者如果没有,处理这个问题的最佳做法是什么?
如何在 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.kts在shared模块中的参考:
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform") version "1.4.30"
}
group …Run Code Online (Sandbox Code Playgroud) 可以不使用例如ktorwithokhttp作为引擎,而是直接使用okhttp4它仅在 Kotlin 中构建吗?