javaandroidandroid-jetpack-datastoreproto-datastore

DataStoreFile not available?


My DataStore implementation, in a Java Android app, can't find 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)
    ...

Here are my app's build.gradle.kts' dependencies:

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

... and from 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" }
...

Here are Android Studio's DataStore and ProtoBuf 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
...

And here's how I create the Proto data store:

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

I've tried cleaning and rebuilding, invalidating caches, different library versions, etc., but I can't seem to get past this issue. I mentioned this is a Java app because I'm wondering if some Kotlin dependency might make this work.

How can I include DataStoreFile?


Solution

  • Adding the plugin org.jetbrains.kotlin.android got it working.