Protobuf JavaLite是否支持google.protobuf.Struct / google.protobuf.Value?

4
这是我们试图发送的原型消息。
message Cta {
  string title = 1;
  string pid = 2;
  google.protobuf.Struct params = 3;
}
  • 推荐用于Android的protobuf-lite库是否支持google.protobuf.Struct

  • 我们在哪里可以找到javaliite运行时支持的已知proto类型的列表?

  • 如果java-lite不支持Struct / Value,那么对于HashMap<String, Object>,推荐使用哪种proto类型?

我们使用的Gradle用于从proto生成Java代码。

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'com.google.protobuf'
    id 'org.jetbrains.kotlin.android'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

android {
    compileSdkVersion 33
    buildToolsVersion "30.0.3"
    namespace 'com.boom.protobuf'

}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.20.1"
    }

    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite'
                }
                kotlin {
                    option 'lite'
                }
            }
        }
    }
}

dependencies {
    api 'com.google.protobuf:protobuf-kotlin-lite:3.23.0'
    api 'com.google.protobuf:protobuf-javalite:3.23.0'
}
1个回答

0

追踪Protobuf Java Lite运行时的文档,我找到了一些关于你的第一个和第二个问题的答案。你想要的在MessageLite接口中。

推荐用于Android的protobuf-lite库是否支持google.protobuf.Struct?

是的。从“所有已知实现类”中可以看出,StructValue实现了MessageLite接口。这意味着它们在该运行时级别可用。

我们在javalite运行时的protobuf中如何找到支持的已知proto类型列表?

那个“所有已知实现类”的列表是我为你找到的最接近的东西。


问题是这可能解决不了你的问题。Protobuf要求你定义你想要序列化的结构。也就是说,如果你不想事先定义它,你需要自己处理。一个选择是使用JSON(或任何其他序列化格式)将对象序列化,并将其作为原始值注入到消息中。

感谢您的回答。尽管它已经实现了,但由于某种原因,我们无法在这里使用结构体。 - Sudev Ambadi
谢谢你的回答。尽管有实施,但由于某些原因我们无法在这里使用结构体。 - Sudev Ambadi
我理解你的观点,当结构是松散类型时使用protobuf是多么有益。但是这个结构只是一个更大负载的一小部分(为了简单起见,我在这里省略了更大的负载),而且结构只对更大的负载做出了很小的贡献。 - Sudev Ambadi
我理解你指出当结构是松散类型时使用协议缓冲对益处的观点。但是该结构只是一个更大有效载荷的一小部分(为简单起见,我在这里省略了更大的有效载荷),并且结构只对更大有效载荷做出了很小的贡献。 - Sudev Ambadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接