感觉这是非常直接的,但我是Kotlin和KMM的新手〉〈
基本上,我尝试在Android Studio中使用KMM插件设置的KMM项目中使用this library。
我的共享build.gradle.kts文件如下所示:`
plugins {
kotlin("multiplatform")
kotlin("native.cocoapods")
id("com.android.library")
}
kotlin {
android()
iosX64()
iosArm64()
iosSimulatorArm64()
cocoapods {
summary = "Some description for the Shared Module"
homepage = "Link to the Shared Module homepage"
version = "1.0"
ios.deploymentTarget = "14.1"
podfile = project.file("../iosApp/Podfile")
framework {
baseName = "shared"
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
val androidMain by getting {
dependencies {
implementation("com.kizitonwose.calendar:compose:2.0.3")
}
}
val androidTest by getting
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
val iosX64Test by getting
val iosArm64Test by getting
val iosSimulatorArm64Test by getting
val iosTest by creating {
dependsOn(commonTest)
iosX64Test.dependsOn(this)
iosArm64Test.dependsOn(this)
iosSimulatorArm64Test.dependsOn(this)
}
}
}
android {
namespace = "com.example.pilld"
compileSdk = 32
defaultConfig {
minSdk = 21
targetSdk = 32
multiDexEnabled = true
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
implementation("com.kizitonwose.calendar:compose:2.0.3")
}
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.0")
}
** App build.gradle.kts (I believe this is called top-level?):**
buildscript {
dependencies {
classpath("com.android.tools.build:gradle:7.3.0")
}
}
plugins {
//trick: for the same plugin versions in all sub-modules
id("com.android.application").version("7.3.1").apply(false)
id("com.android.library").version("7.3.1").apply(false)
kotlin("android").version("1.7.10").apply(false)
kotlin("multiplatform").version("1.7.10").apply(false)
id("org.jetbrains.compose").version("1.2.1")
}
tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
}
** And finally the shared/commonMain/Greeting.kt file in which I am trying to use the library:**
package com.example.pilld
//import com.kizitonwose.calendar.*
class Greeting {
private val platform: Platform = getPlatform()
fun greeting(): String {
return "Hello, ${platform.name}!"
}
}
`
我还没有尝试太多,只是在做安装。我已经尝试导入Greeting.kt文件,但是它不识别库。我是否应该将它作为依赖项添加到commonMain源集中?我也一直在阅读文档,但是它有点混乱,我不能得到一个直接的答案。任何建议都将不胜感激!
1条答案
按热度按时间ia2d9nvy1#
您提到的库应该在
androidApp
模块中。您需要在androidApp/build.gradle.kts
文件中添加此依赖项。并在您的Android表示层代码中使用它(位于androidApp/
文件夹中)你不能在
shared
-〉commonMain
模块中使用特定于平台的库。1.如果你想在共享代码中使用库,你需要在
commonMain
中为你的特定于平台的代码(类、方法、接口)创建公共api,并用特殊的expect
关键字标记它。然后在androidMain
和iosMain
中提供特定于平台的实现,并用actual
关键字标记它们。请看official documentation1.直接在
androidApp
模块中使用库,而不是在共享代码中使用库