это мой первый раз, когда я погружаюсь в хранилище данных protobuf и jetpack, но я столкнулся с проблемой, которая довольно сбивает с толку.
Я создал свой файл .proto в src/main/java/proto, это очень просто:
syntax = "proto3";
option java_package = "com.test.appname.proto";
option java_multiple_files = true;
message WalkInfo {
float distance = 1;
bool run = 2;
}
Затем я написал в kotlin класс сериализатора для некоторых данных в моем приложении.
object WalkInfoSerializer : Serializer<Walker.WalkInfo>{
override val defaultValue: Walker.WalkInfo
get() = WalkInfo.getDefaultInstance()
override fun readFrom(input: InputStream): Walker.WalkInfo {
try {
return WalkInfo.parseFrom(input)
} catch (exception: InvalidProtocolBufferException) {
throw CorruptionException("Cannot read proto.", exception)
}
}
override fun writeTo(t: Walker.WalkInfo, output: OutputStream) {
t.writeTo(output)
}
}
Я также настроил свой файл build.gradle следующим образом:
plugins {
id 'com.android.application'
id 'kotlin-android'
id "com.google.protobuf" version "0.8.14"
}
...
dependencies {
...
//DataStore
implementation "androidx.datastore:datastore:1.0.0-alpha05"
implementation 'com.google.protobuf:protobuf-javalite:3.14.0'
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.10.0"
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {
option 'lite'
}
}
}
}
}
Все работает нормально, классы генерируются правильно, и они даже всплывают в автозаполнении студии Android. Проблема в том, что я не могу скомпилировать проект, так как не могу найти способ разрешить неразрешенную ссылку для сгенерированных методов (например, getDefaultInstance(), parseFrom(), writeTo() Даже путем написания полного class path это не сработает.
Я что-то упускаю? Я пытался поиграть с build.gradle и файлом proto с некоторыми настройками, которые я нашел в их документации, но я все еще не мог заставить его работать.
Благодарю вас!