You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java应用中DataStoreFile类找不到的问题求助

解决Android Java应用中DataStoreFile类找不到的问题

问题描述

运行Java编写的Android应用时,出现DataStoreFile类找不到的错误,报错栈信息如下:

java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/DataStoreFile;
    at androidx.datastore.rxjava3.RxDataStoreBuilder$build$delegateDs$2.invoke(RxDataStoreBuilder.kt:155)
    at androidx.datastore.rxjava3.RxDataStoreBuilder$build$delegateDs$2.invoke(RxDataStoreBuilder.kt:154)
    at androidx.datastore.core.FileStorage.createConnection(FileStorage.kt:48)
    at androidx.datastore.core.DataStoreImpl$storageConnectionDelegate$1.invoke(DataStoreImpl.kt:189)
    at androidx.datastore.core.DataStoreImpl$storageConnectionDelegate$1.invoke(DataStoreImpl.kt:188)
    ...

当前依赖配置

模块build.gradle.kts中的依赖:

dependencies {
    ...
    implementation(libs.datastore)
//    implementation(libs.datastore.core)
//    implementation(libs.datastore.rxjava2)
    implementation(libs.datastore.rxjava3)
    implementation(libs.protobuf.javalite)
}

libs.versions.toml中的版本管理:

[versions]
datastore = "1.1.1"
protobuf = "4.26.1"
...

[libraries]
datastore = { module = "androidx.datastore:datastore", version.ref = "datastore" }
datastore-core = { module = "androidx.datastore:datastore-core", version.ref = "datastore" }
datastore-rxjava2 = { module = "androidx.datastore:datastore-rxjava2", version.ref = "datastore" }
datastore-rxjava3 = { group = "androidx.datastore", name = "datastore-rxjava3", version.ref = "datastore" }
protobuf-javalite = { module = "com.google.protobuf:protobuf-javalite", version.ref = "protobuf" }
...

已加载的外部依赖

Android Studio External Libraries显示的相关依赖:

Gradle: androidx.datastore:datastore-core-jvm:1.1.1
Gradle: androidx.datastore:datastore-core-okio-jvm:1.1.1
Gradle: androidx.datastore:datastore-jvm:1.1.1
Gradle: androidx.datastore:datastore-rxjava3:1.1.1@aar
...
Gradle: com.google.protobuf:protobuf-javalite:4.26.1
...

DataStore初始化代码

RxDataStore<NtripService> serviceStore = new RxDataStoreBuilder<>(App.getAppContext(), "service.pb", new ServiceSerializer()).build();

已尝试清理重建项目、清除缓存、更换库版本,问题未解决,怀疑缺少Kotlin相关依赖。

解决方案

1. 添加Kotlin标准库依赖

DataStore核心实现基于Kotlin,Java项目必须显式引入Kotlin标准库才能解析Kotlin编译的类。在模块build.gradle.kts的dependencies块中添加:

implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.20") // 版本可匹配Android Gradle Plugin的最新稳定版

或通过版本目录管理:
在libs.versions.toml中添加:

[versions]
kotlin = "1.9.20"

[libraries]
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }

再在模块build.gradle.kts中引用:

implementation(libs.kotlin.stdlib)

2. 显式引入DataStore核心依赖

虽然datastore依赖会传递引入datastore-core,但显式添加可避免依赖解析异常:

implementation(libs.datastore.core)

3. 检查并解决依赖冲突

执行Gradle命令分析依赖树,排查版本冲突:

./gradlew app:dependencies

若存在androidx.datastore相关依赖版本不一致,可强制统一版本:

configurations.all {
    resolutionStrategy.force("androidx.datastore:datastore-core:1.1.1")
    resolutionStrategy.force("androidx.datastore:datastore-rxjava3:1.1.1")
}

4. 完善Protobuf插件配置

确保项目正确配置Protobuf插件,在根目录build.gradle.kts中添加:

plugins {
    id("com.google.protobuf") version "0.9.4" apply false
}

在模块build.gradle.kts中应用插件并配置:

plugins {
    ...
    id("com.google.protobuf")
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:${libs.versions.protobuf.get()}"
    }
    generateProtoTasks {
        all().forEach { task ->
            task.builtins {
                create("java") {
                    option("lite")
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Crag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:17:03