我正在尝试按照此处概述的步骤将 Realm Kotlin 添加到 Android 库模块 https://www.mongodb.com/docs/realm/sdk/kotlin/install/#add-the-sdk-to-项目。但是我发现只有 Android 选项可用(如 Android 应用程序,而不是 Android 库)。该库将只有模块 build.gradle 文件,而没有项目 build.gradle。
这个想法是简单地让这个库包含 Realm 对象并在多个应用程序中使用它,而不需要这些应用程序声明对领域的任何依赖项,只需我的库。
我尝试创建一个演示应用程序项目,并使用以下 build.gradle 添加模块 Android 库:
//build.gradle.kts (Module :lib)
plugins {
id("com.android.library")
id("org.jetbrains.kotlin.android")
id("io.realm.kotlin") version "1.14.0"
}
android {
namespace = "com.ba.lib"
compileSdk = 34
defaultConfig {
minSdk = 33
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
//realm
implementation("io.realm.kotlin:library-base:1.11.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0")
}
在库文件中创建了一个虚拟领域对象:
class SomeObject : RealmObject {
@PrimaryKey
var id: String = ""
var name: String = ""
}
var realm = Realm.open(RealmConfiguration.create(schema = setOf(
SomeObject::class,
)))
然后在主应用程序中,当我尝试访问该对象时,它给出了编译错误:
无法访问“io.realm.kotlin.types.RealmObject”,它是“com.ba.lib.SomeObject”的超类型。检查模块类路径是否缺少或冲突的依赖项。
如果有人以前处理过这个问题并解决了它,我将不胜感激。谢谢!
原因是您添加的 Realm 依赖项无法从 app 模块传递访问,因此您无法与 Realm 相关实体进行交互。
为此,您可以使用 api
关键字而不是
implementation
将其包含在 mylibrary模块中:
api("io.realm.kotlin:library-base:1.11.0")