标签: kmm

无法导入@Inject注释

我已经在我的项目中实现了 Hilt 依赖项,但是当我的构造函数需要 @Inject 注释时,它不起作用。基本上,当我尝试手动导入它时,我发现 javax 内的注入文件夹是空的。所以结构就像javax.inject。之后我什么也没得到,因为注入文件夹是空的。我尝试过重建和清理他的项目。我也尝试过使缓存无效,但似乎没有任何效果。我怎样才能做到这一点?

依赖项列表

dependencies {
    implementation(project(":shared"))

    implementation(AndroidX.appCompat)

    implementation(Compose.runtime)
    implementation(Compose.runtimeLiveData)
    implementation(Compose.ui)
    implementation(Compose.material)
    implementation(Compose.uiTooling)
    implementation(Compose.foundation)
    implementation(Compose.compiler)
    implementation(Compose.constraintLayout)
    implementation(Compose.activity)
    implementation(Compose.navigation)

    implementation(Google.material)

    implementation(Hilt.hiltAndroid)
    implementation(Hilt.hiltNavigation)
    kapt(Hilt.hiltCompiler)

    implementation(Kotlinx.datetime)

    debugImplementation(SquareUp.leakCanary)
}
Run Code Online (Sandbox Code Playgroud)

刀柄版本 - 2.37

java android kotlin dagger-hilt kmm

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

未解决的参考:iosSimulatorArm64

当尝试将用 kotlin 编写的现有简单 Android 应用程序转换为KMM时,我遇到了阻止程序。

下面是以下错误。

Please initialize at least one Kotlin target in 'kmmsharedmodule (:kmmsharedmodule)'.
Read more https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#setting-up-targets

Unresolved reference: iosSimulatorArm64
Run Code Online (Sandbox Code Playgroud)

我阅读了链接中提供的文档,但似乎不是我想要的直接解决方案。

我采取的过程只是通过 android studio 中提供的支持添加 KMM 模块。

我寻找过其他来源,但找不到任何相关问题

android ios kotlin android-studio kmm

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

如何在 Kotlin 多平台项目的共享模块中使用 @Parcelize 注解

我正在开发一个 Kotlin 多平台应用程序,我想在我的模型类中使用 @Parcelize 注释。但在 Kotlin Multiplatform 插件中,我使用的 kotlin 版本中的 @Parcelize 注释位于 android.extensions 插件中,适用于 androidApp 模块。

关于我的 build.gradle.kts(androidApp)

plugins {
  id("com.android.application")
  kotlin("android")
  kotlin("android.extensions")
  kotlin("kapt")
  id("kotlinx-serialization")
  id("androidx.navigation.safeargs.kotlin")
}

android {
  compileSdkVersion(Versions.compileSdk)

  compileOptions{
    sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
    targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_8
  }

  kotlinOptions{
    jvmTarget = JavaVersion.VERSION_1_8.toString()
  }

  kapt{
    generateStubs = true
    correctErrorTypes = true
  }

  androidExtensions{
    isExperimental = true
  }

  buildFeatures{
    dataBinding = true
    viewBinding = true
  }

  defaultConfig {
    applicationId = "com.jshvarts.kmp.android"
    minSdkVersion(Versions.minSdk)
    targetSdkVersion(Versions.targetSdk)
    versionCode = 1
    versionName = "1.0"

    testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" …
Run Code Online (Sandbox Code Playgroud)

android kotlin kmm

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

Firebase Crashlytics - 崩溃报告不会反混淆

我最近将 Firebase Crashlytics 集成到我的 KMM 应用程序中,并设置了一个带有混淆的发布版本。我遵循官方文档(https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=android),以便在 Crashlytics 仪表板中获取混淆构建的可读报告,但我仍然收到混淆错误。

这是我的build.gradle.kts版本构建设置:

   getByName("release") {
        isDebuggable = true
        isMinifyEnabled = true
        configure<com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension> {
            mappingFileUploadEnabled = true
        }
        proguardFiles(
            getDefaultProguardFile("proguard-android-optimize.txt"),
            "proguard/crashlytics.pro"
        )
    }
Run Code Online (Sandbox Code Playgroud)

还有我的crashlytics.pro文件

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.
Run Code Online (Sandbox Code Playgroud)

我使用的是 Firebase BoM 版本 29.3.0。

obfuscation android firebase crashlytics kmm

5
推荐指数
0
解决办法
993
查看次数

Kotlin Multiplatform:无法从另一个模块的 androidMain 源集中引用 commonMain 源集中的类

我有两个多平台模块shared以及other一个针对 Android 和 iOS 的标准多平台模板项目。

sharedcommonMain在源集中定义一个类

class SharedGreeting()
Run Code Online (Sandbox Code Playgroud)

othershared在 gradle 文件中设置为依赖如下:

val commonMain by getting {
            dependencies {
                implementation(project(":shared"))
            }
        }
Run Code Online (Sandbox Code Playgroud)

在其androidMain源集中,它尝试引用SharedGreeting某个类 fx:

class AndroidGreeter{
   val foo = SharedGreeting()
}
Run Code Online (Sandbox Code Playgroud)

但无论我尝试什么,当我尝试引用共享类时都会遇到 IDE 错误,并且我必须手动添加导入语句。

不过代码编译和部署没有问题!关于我遗漏或误解的内容有什么想法吗?或者这是 KMM 中的一个错误?

gradle 文件的完整副本other

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

version = "1.0"

kotlin {
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link …
Run Code Online (Sandbox Code Playgroud)

android kotlin-multiplatform kmm

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

Kotlin Multiplatform Mobile 找不到 klib 包

我读过这些 SO 帖子123,它们也面临着类似的问题。.klib我正在尝试在我的 KMM Android 项目中使用 a 。Klib 是从library.hC 头文件构建的。这就是我所做的:

我构建了 Kotlin 库

在 KMM 项目中使用以下 Gradle 块shared

kotlin {
    ...
    androidNativeArm64 { // target
        compilations.getByName("main") {
            val mylib by cinterops.creating {
                defFile(project.file("mylib.def"))

                packageName("c.mylib")
                // Options to be passed to compiler by cinterop tool.
                compilerOpts("-I/home/me/CLionProjects/mylib/")

                // Directories for header search (an analogue of the -I<path> compiler option).
                includeDirs.allHeaders("/home/me/CLionProjects/mylib/")

                // A shortcut for includeDirs.allHeaders.
                includeDirs("/home/me/CLionProjects/mylib/")
            }
        }
        binaries { …
Run Code Online (Sandbox Code Playgroud)

gradle android-studio kotlin-native kotlin-multiplatform kmm

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

KMM:未找到 embedAndSignAppleFrameworkForXcode 任务

我按照“创建您的第一个应用程序”指南创建了一个基本的 KMM https://kotlinlang.org/docs/kmm-create-first-app.html

然后我尝试使用 Android Studio 终端中的以下命令构建框架。./gradlew :共享:embedAndSignAppleFrameworkForXcode

但我收到这个错误。在项目“:shared”中找不到任务“embedAndSignAppleFrameworkForXcode”。

Android Studio 2020.3.1 补丁 3 Kotlin 1.5.31

SO 上也有类似的问题。人们说 embedAndSignAppleFrameworkForXcode 至少应该与 Kotlin 1.5.20 兼容。 KMM - 在项目“:shared”中找不到错误任务“embedAndSignAppleFrameworkForXcode”, 但它不在我的设置中。

有谁知道如何解决这一问题?

更新 当从 XCode/Build Phases 脚本启动时,任务运行得非常好。不知何故,它无法从终端(Android Studio 或系统一)启动。

kotlin android-studio kmm

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

KMM 和 iOS 中的传递依赖关系如何工作?

假设我有一个包,即共享包,与两个 KMM 项目共享:KMM 项目 A 和 KMM 项目 B。

因此,我们有共享包 -> KMM 项目 A 和共享包 -> KMM 项目 B。

现在我想在我的 iOS 应用程序中使用 KMM 项目 A 和 KMM 项目 B。这是如何运作的?共享包是否与两个框架捆绑在一起(即我两次包含相同的依赖项?)。此外,共享包是否需要是 KMM 项目才能允许 KMM 项目 A 和 B 生成相关的 iOS 框架?或者它可以是一个纯 Kotlin 项目吗?

这是一个图表,可以对我试图理解的情况提供更多解释。

在此输入图像描述

kotlin kotlin-multiplatform kmm

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

KMM 是否适用于 Android Studio - Windows 版本

我需要为 iOS 和 Android 构建一个应用程序。
重新启动 Android Studio 后出现此错误。

Kotlin Multiplatform Mobile 插件问题
Kotlin Multiplatform Mobile 插件应该只适用于 macOS

我正在使用 Windows 机器。
请告诉我,如果有任何解决此问题的方法。

windows android-studio kotlin-multiplatform kmm

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

KMM 应用程序无法在模拟器中运行

我是 KMM 新手,我正在尝试将 KMM 项目作为 pod 集成到我的示例 Xcode 项目中。我可以将 KMM Pod 链接到我的 Xcode 项目。但是,如果我尝试调用其中一个函数,则会产生以下错误。如果我不调用任何 KMM 函数,它可以在我的模拟器中运行该应用程序。

ViewController

import UIKit
import Multiplatform

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let a = Greeting()
        a.greeting()
    }
}
Run Code Online (Sandbox Code Playgroud)
ld: warning: ignoring file /Users/avjiang/Developments/Multiplatform/SharedCode/build/cocoapods/framework/Multiplatform.framework/Multiplatform, building for iOS Simulator-arm64 but attempting to link with file built for iOS Simulator-x86_64
Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_MultiplatformGreeting", referenced from:
      objc-class-ref in ViewController.o
ld: symbol(s) not found …
Run Code Online (Sandbox Code Playgroud)

ios kotlin kotlin-multiplatform kmm

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

如果我使用submitFormWithBinaryData(),如何向 ktor 请求添加标头?

下面的代码是使用 ktor 和 kmm 上传文件......

val client = HttpClient(Apache) {}
    val file = File("path/to/some.file")
    val chatId = "123"
    
    client.submitFormWithBinaryData(
        url = "https://api.telegram.org/bot<token>/sendDocument?chat_id=$chatId",
        formData = formData {
            append("document", file.readBytes(), Headers.build {
                append(HttpHeaders.ContentDisposition, "filename=${file.name}")
            })
        }
    )
Run Code Online (Sandbox Code Playgroud)

android kotlin ktor kotlin-multiplatform kmm

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

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