标签: kotlin-multiplatform

Kotlin 多平台移动 targetSdk 已弃用

build.gradle.kts我在 KMM 项目的模块中设置了文件shared,如下所示:

android {
    namespace = "com.my.project"
    compileSdk = 33

    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig {
        minSdk = 24
        targetSdk = 33
    }
}
Run Code Online (Sandbox Code Playgroud)

对于targetSDK我收到以下警告:

targetSdk: Int?' is deprecated. Will be removed from library DSL in v9.0
Run Code Online (Sandbox Code Playgroud)

如何迁移这部分并targetSdk在我的 KMM 项目中为 Android 项目正确设置版本?

android kotlin-multiplatform

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

无论如何,我们是否可以创建 Kotlin 多平台构建文件的风味版本,例如 dev 和 prod?

我有一个要求,我希望将不同的数据集与 kotlin 多平台模块生成的库一起提供,以适应不同的风格,例如开发和生产。在Android项目中,我们可以使用应用程序的build.gradle中的productFlavors。

在 Kotlin Multiplatform 中是否有类似的方法可以做到这一点?

android kotlin kotlin-multiplatform

24
推荐指数
0
解决办法
1525
查看次数

处理 HttpClient Ktor 中的异常

我在公共模块中编写了如下公共代码,并在JS环境中进行了测试

val response = client.post<HttpResponse>(url) {
    body = TextContent("""{"a":1,"b":2}""", ContentType.Application.Json)
}
if (response.status != HttpStatusCode.OK) {
    logger.error("Error, this one failed bad?")
}

Run Code Online (Sandbox Code Playgroud)

但我的代码以 client.post 结尾,在没有网络的情况下出现取消的 corutineException 。我该如何处理这个异常以及任何其他异常?如果有互联网连接。没有任何失败,我希望能够处理异常。如何?

注意:try、catch 不起作用

kotlin ktor kotlin-multiplatform

20
推荐指数
3
解决办法
2万
查看次数

@Parcelize在多平台项目中

我想在多平台项目中创建一个类,并用Parcelize它来制作ParcelableAndroid版本.

所以在我的lib-common项目中,我尝试过:

expect annotation class Parcelize()
expect interface Parcelable

@Parcelize
data class Foo(x: Int): Parcelable
Run Code Online (Sandbox Code Playgroud)

在我的lib-android项目中:

actual typealias Parcelize = kotlinx.android.parcel.Parcelize
actual typealias Parcelable = android.os.Parcelable
Run Code Online (Sandbox Code Playgroud)

第一个问题是,摇篮插件kotlin-android-extensions似乎并没有参加lib-androidbuild.gradle,所以包kotlinx.android.parcel没有被发现.我设法通过直接导入库来解决这个问题:

implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
Run Code Online (Sandbox Code Playgroud)

有了这个,编译的actual定义Parcelable.

但是,我从定义中得到一个错误Foo,好像它没有正确注释@Parcelize:

Foo不是抽象的,也不实现public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit在中定义的抽象成员android.os.Parcelable

android parcelable kotlin kotlin-android-extensions kotlin-multiplatform

18
推荐指数
2
解决办法
1558
查看次数

未找到名为“jvmMain”的 SourceSet

我正在尝试使用 jvm 和 js 源集运行 kotlin 多平台项目,但出现以下错误:

FAILURE: Build failed with an exception.

* Where:
Initialization script '/private/var/folders/yc/sdfads/T/Home_main__.gradle' line: 20

* What went wrong:
A problem occurred configuring root project 'kotlin-multiplatform'.
> Could not create task ':Home.main()'.
   > SourceSet with name 'jvmMain' not found.
Run Code Online (Sandbox Code Playgroud)

Home是一个类src/jvmMain/kotlin/Home.kt并且只有一个main()函数。

我尝试尽可能地遵循文档,我自己的代码并不多。我只是将jvmMain源集设置为依赖commonMain并添加更多的库。我的build.gradle

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

kotlin {
    jvm()
    js().browser()
//    android()

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(kotlin("stdlib-common"))
            } …
Run Code Online (Sandbox Code Playgroud)

gradle-kotlin-dsl kotlin-multiplatform

16
推荐指数
0
解决办法
4784
查看次数

使用 Ktor 时出现“未找到转换:类 io.ktor.utils.io.ByteChannelNative”错误

我正在尝试获取并反序列化github上托管的一些数据。

{
  "Meals": [
    {
      "id": "1598044e-5259-11e9-8647-d663bd870b02",
      "name": "Tomato pasta",
      "quantity": [{
        "quantity": 1 },
        {
          "quantity": 2
        },
        {
          "quantity": 3
        }],
      "availableFromDate": "1605802429",
      "expiryDate": "1905802429",
      "info": "Vegetarian",
      "hot": false,
      "locationLat": 57.508865,
      "locationLong": -6.292,
      "distance": null
    },
    {
      "id": "2be2d854-a067-43ec-a488-2e69f0f2a624",
      "name": "Pizza",
      "quantity": [{
        "quantity": 1 },
        {
        "quantity": 2
        },
        {
          "quantity": 3
        }
      ],
      "availableFromDate": "1605802429",
      "expiryDate": "1905902429",
      "info": "Meat",
      "hot": false,
      "locationLat": 51.509465,
      "locationLong": -0.135392,
      "distance": null
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如果我在本地启动json 服务器,那么它会完美工作,所以我知道我的数据类不是问题。但是,当我尝试从 github …

json kotlin ktor kotlin-multiplatform

16
推荐指数
3
解决办法
2万
查看次数

KMM:编译失败:意外的 IrType 类型:KIND_NOT_SET

我正在尝试在共享库中运行测试。

设置(两台机器的版本应该相同 - 截至今天都是最新的):

Kotlin 1.6.21 (tried 1.6.20 and 1.6.10)

OpenJDK 11.0.15 (via Homebrew)

IntelliJ
Build #IC-221.5591.52, built on May 10, 2022
Runtime version: 11.0.14.1+1-b2043.45 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

XCode 13.3.1 with command-line tools

macOS BigSur 12.3.1
Run Code Online (Sandbox Code Playgroud)

M1专业版

:cleanIosSimulatorArm64Test :iosSimulatorArm64Test --tests "com.example.shared.ConverterTest" --stacktrace
Run Code Online (Sandbox Code Playgroud)

Intel Core i9(同样的错误,只需将“arm”更改为“x64”)

:cleanIosX64Test :iosX64Test --tests "com.example.shared.ConverterTest"
Run Code Online (Sandbox Code Playgroud)
> Task :linkDebugTestIosSimulatorArm64 FAILED
e: Compilation failed: Unexpected IrType kind: KIND_NOT_SET
 * Source files: 
 * Compiler version info: Konan: 1.6.21 / Kotlin: 1.6.21 …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-multiplatform kotlin-multiplatform-mobile

16
推荐指数
2
解决办法
663
查看次数

Kotlin 多平台配置问题

我的 KMP + Jetpack Compose 项目中继续出现 Gradle 配置错误

配置项目“:shared”时出现问题。

未找到名为“testApi”的配置。

我的设置是:

  1. Android Studio 北极狐 2020.3.1 Canary 3
  2. 项目级别设置
dependencies {
   classpath("com.android.tools.build:gradle:7.0.0-alpha03")
   classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.20")
}
Run Code Online (Sandbox Code Playgroud)
  1. '共享模块'
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
    kotlin("multiplatform")
    id("com.android.library")
}

kotlin {
    android()
    ios {
        binaries {
            framework {
                baseName = "shared"
            }
        }
    }
    sourceSets {
        val commonMain by getting
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("com.google.android.material:material:1.2.1")
            }
        }
        val androidTest by getting {
            dependencies { …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin kotlin-multiplatform

14
推荐指数
2
解决办法
2459
查看次数

如何修复 IntelliJ IDEA 中的““多平台项目”功能是实验性的,应该显式启用”警告

每当我expect在 IntelliJ IDEA 中编写函数时,都会收到以下警告:
The feature "multi platform projects" is experimental and should be enabled explicitly

哪里可以开启这个功能呢?我已经搜索了设置,但没有找到禁用该警告的方法。

使用 gradle 编译效果很好。

kotlin kotlin-multiplatform

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

native-mt 和普通 kotlin 协程库有什么区别?

当我们使用协程时,我们可以使用普通的 kotlin 协程,也可以使用版本native-mt

IE

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
Run Code Online (Sandbox Code Playgroud)

或者

    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-native-mt'
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别吗?我们什么时候应该使用哪个?

kotlin kotlin-multiplatform kotlin-coroutines

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