标签: kotlin-native

在 Kotlin/Native 中读取环境变量

好的,所以我想创建一个原生应用程序来读取一些环境变量,并根据一些业务逻辑,将它们的值更改为其他内容。我决定在 Kotlin 中做这件事。

通过创建函数,我设法找出了如何更改系统环境变量:

fun call(arg: String) = platform.posix.system(command)

fun setEnvironmentVariable(variable: String, value: String) {
    println("Changing value of $variable to $value")
    call("SETX $variable $value")
}
Run Code Online (Sandbox Code Playgroud)

但它只会改变值。我想将它存储在 Kotlin 变量中并对其进行一些操作。

发出语句 call("SET $variable") 将值打印到命令提示符,但我不知道如何从 Kotlin 捕获它。我想是否有一种方法可以将命令提示符的输出提取到一个字符串中,这样会更容易,即使 Windows 以 myvariable=myvalue 的形式输出它,而不仅仅是值。

提前致谢

environment-variables kotlin kotlin-native

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

kotlin MPP 与 Kotlin Native 不同吗?

我已经在线阅读了多个内容,但仍然无法理解 Kotlin 多平台移动版与 Kotlin Native 之间有明显区别吗?

kotlin kotlin-native kotlin-multiplatform

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

为什么 Kotlin 本地可执行文件比等效的 Rust 可执行文件大?

我创建了 2 个简单的“Hello World!” 程序,一个使用 Kotlin,一个使用 Rust:

科特林:

fun main() {
    println("Hello, world!")
}
Run Code Online (Sandbox Code Playgroud)

锈:

fun main() {
    println("Hello, world!")
}
Run Code Online (Sandbox Code Playgroud)

我为两者生成了可执行文件: kotlinc-native main.kt用于 Kotlin 和cargo build --releaseRust,然后使用ls -S -lh | awk '{print $5, $9}'.

我发现 Kotlin 原生生成的文件是 Rust 生成的文件大小的 1.48 倍。

为什么会存在这种差异?

fn main() {
    println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)

此外,Rust 可以优化得更小,Kotlin 原生有没有类似的东西?

最初设定:

$ cargo new hello_world

构建:

$ cargo build

=> 589,004 bytes

优化步骤 1:

构建:

$ cargo build --release

=> 586,028 bytes

优化步骤 …

kotlin kotlin-native

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

应用插件请求时发生异常[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本机执行命令并获取输出

我想知道kotlin本机中是否存在一种通过posix调用命令并接收其终端输出的方法。例如,我想使“ git diff”命令正常工作,而不必创建一个临时文件,将输出写入该文件,然后从该文件中读取。

在SO上,我仅找到需要ProcessBuilder的解决方案,由于它是Java库,因此在kotlin-native上不可用。

terminal posix kotlin-native

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

当从 C 调用 Kotlin 回调函数时,如何避免 Kotlin Native 中出现错误“staticCFunction Must take an unbound...”?

这是一个关于回调函数的一般问题,在 Kotlin Native 中定义,由 C 函数调用。

为了便于论证,假设我正在尝试使用Kotlin Native中的https://linux.die.net/man/3/nftw递归地遍历文件系统中的目录。(我知道还有其他方法可以做到这一点,使用其他 C 函数,但这不是这个问题的核心。)

nftw() 将函数作为回调:

val directory = "//some/directory"
val callback = kotlinx.cinterop.staticCFunction {
            file: CPointer<ByteVar>?,
            stat: CPointer<stat>?,
            typeFlag: Int,
            b: CPointer<FTW>? ->

            val fileName = file?.toKString()
            println(fileName)
            val result = 0
            result
        }

val depth = 10
val flags = 0
platform.posix.nftw(directory, callback, depth, flags)
Run Code Online (Sandbox Code Playgroud)

这适用于通过“println()”列出文件,但是一旦 lambda 包含任何捕获的值,我就会收到以下编译器错误:

“kotlinx.cinterop.staticCFunction 必须采用未绑定、非捕获函数或 lambda”。

我的问题是:是否有关于如何从此类回调访问任何非全局状态的推荐方法?

我确实想出了一个使用全局变量的讨厌的解决方法,所以这不是我主要寻找的。如果有使用@ThreadLocal或其他东西的普遍接受的解决方案,请讨论。

kotlin kotlin-native

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

Kotlin 对象到 CPointer

我正在尝试将 Kotlin 对象传递给 C 库,该库会将该对象传递给回调函数。这个函数是用 Kotlin 编写的,因此我可以使用这个对象并使用它。但是我找不到将 Kotlin 对象转换为 CPointer 的方法。我发现的唯一可能是我需要的东西是fun createKotlinObjectHolder(any: Any?): NativePtrfun <reified T : Any> unwrapKotlinObjectHolder(holder: Any?): T。但即使我使用刚刚创建的NativePtr将其传递给解包函数,它也会失败并显示错误消息unrecognized selector sent to instance 0xXYZ。我做错了什么或者这些功能不是我应该使用的?

使用 libcURL 的示例代码:

fun writeCallback(ptr: CPointer<ByteVar>, ignored: ULong, size: ULong, userData: COpaquePointer?): ULong {
    if (userData != null) {
        unwrapKotlinObjectHolder<StringBuilder>(userData.rawValue).append("Hello")
    }
    return size
}

fun main() {
    ...
    val curl = curl_easy_init()
    ...
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, staticCFunction(::writeCallback))

    val stringBuilder = StringBuilder()
    val nativePtr = createKotlinObjectHolder(stringBuilder)
    val cPtr …
Run Code Online (Sandbox Code Playgroud)

kotlin-native

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

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
查看次数

在 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
查看次数

Tensorflow Kotlin/Native 在“&lt;root&gt;”包中找不到“main”

我想编译并启动。

package korat

import tensorflow.TF_Version

fun main(args: Array<String>) {
    print(TF_Version())
}
Run Code Online (Sandbox Code Playgroud)

当我运行命令时:

kotlinc-native /home/fnasibov/IdeaProjects/Korat/src/linuxMain/kotlin/korat/Test.kt -l tensorflow
Run Code Online (Sandbox Code Playgroud)

它返回一个错误:

error: could not find 'main' in '<root>' package.
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

更新 1

添加后-e korat.main 有错误

error: compilation failed: Provider "jar" not found
    *Source files: Test.kt
    *Compiler version info: Konan: 0.9.3 / Kotlin: 1.3.0
    *Output kind: PROGRAM

exception: java.nio.file.ProviderNotFoundException: Provider "jar" not found
Run Code Online (Sandbox Code Playgroud)

kotlin-native

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