我已经在我的项目中实现了 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
当尝试将用 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 模块。
我寻找过其他来源,但找不到任何相关问题
我正在开发一个 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) 我最近将 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。
我有两个多平台模块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) 我读过这些 SO 帖子1、2、3,它们也面临着类似的问题。.klib我正在尝试在我的 KMM Android 项目中使用 a 。Klib 是从library.hC 头文件构建的。这就是我所做的:
在 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
我按照“创建您的第一个应用程序”指南创建了一个基本的 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 或系统一)启动。
假设我有一个包,即共享包,与两个 KMM 项目共享:KMM 项目 A 和 KMM 项目 B。
因此,我们有共享包 -> KMM 项目 A 和共享包 -> KMM 项目 B。
现在我想在我的 iOS 应用程序中使用 KMM 项目 A 和 KMM 项目 B。这是如何运作的?共享包是否与两个框架捆绑在一起(即我两次包含相同的依赖项?)。此外,共享包是否需要是 KMM 项目才能允许 KMM 项目 A 和 B 生成相关的 iOS 框架?或者它可以是一个纯 Kotlin 项目吗?
这是一个图表,可以对我试图理解的情况提供更多解释。
我需要为 iOS 和 Android 构建一个应用程序。
重新启动 Android Studio 后出现此错误。
Kotlin Multiplatform Mobile 插件问题
Kotlin Multiplatform Mobile 插件应该只适用于 macOS
我正在使用 Windows 机器。
请告诉我,如果有任何解决此问题的方法。
我是 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) 下面的代码是使用 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 和 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)
如何重现:
有什么想法如何解决这个问题吗?
kmm ×12
kotlin ×8
android ×7
ios ×2
crashlytics ×1
dagger-hilt ×1
firebase ×1
gradle ×1
java ×1
ktor ×1
obfuscation ×1
windows ×1