Java protobuf 描述符生成器工具

如需将基于 Java 的发布者注册到 可配置发布者注册表, 您必须提供序列化的 protobuf FileDescriptorSet,其中包含已发布的 protobuf 消息的定义。如需了解详情,请参阅 自描述消息。不过,在设备上,只有“精简版”的 Java protobuf 库可用,该库缺少必要的 protobuf 反射功能。

如需解决此问题,您可以使用本页介绍的 Java protobuf 描述符生成器工具在构建时生成必要的元数据。该工具是一个二进制文件,您可以手动构建和运行,也可以作为 Android 构建的一部分自动使用。

此工具会生成一个最小的 Java 类,其中包含表示 protobuf 文件(带有 .proto 扩展名)及其依赖项的序列化 FileDescriptorSet。我们建议您使用 Android.bp 中的 genrule 将其集成到构建中。以下示例展示了如何从 Example.proto 文件生成包含序列化 FileDescriptorSetExample.java 文件:

genrule {
    name: "example_descriptors_gen",
    tools: ["sdv_telemetry_sdk_descriptor_generator_java"],
    srcs: ["Example.proto"],
    out: ["Example.java"],
    cmd: "$(location sdv_telemetry_sdk_descriptor_generator_java) " +
        "--proto_file $(location Example.proto) " +
        "--proto_path $$(dirname $(location Example.proto)) " +
        "--message_full_name com.example.ExampleMessage " +
        "--output_file $(out) " +
        "--output_package com.example " +
        "--output_class Example "
}

java_library {
    name: "example_descriptors_lib",
    srcs: [":example_descriptors_gen"],
}

您可以将生成的 java_library 包含在应用中,并将其与 可配置发布者注册表库的 遥测 SDK 结合使用,以注册发布者。

您还可以手动构建和运行该工具:

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run