Herramienta de generación de descriptores de Protobuf en Java

Para registrar un publicador basado en Java en el Registro de publicadores configurables, debes proporcionar un protobuf serializado FileDescriptorSet que contenga la definición del mensaje protobuf publicado. Para obtener más información, consulta Mensajes autodescriptivos. Sin embargo, integrado en el dispositivo, solo está disponible la versión "lite" de la biblioteca protobuf de Java, que carece de las capacidades de reflexión de protobuf necesarias.

Para resolver este problema, puedes usar la herramienta de generación de descriptores protobuf de Java que se describe en esta página para generar los metadatos necesarios en el tiempo de compilación. La herramienta es un objeto binario que puedes compilar y ejecutar de forma manual, o usar automáticamente como parte de tu compilación de Android.

Esta herramienta genera una clase Java mínima que contiene el FileDescriptorSet serializado que representa un archivo protobuf (con una extensión .proto) y sus dependencias. Te recomendamos que lo integres en tu compilación con una genrule en Android.bp. En el siguiente ejemplo, se muestra cómo generar un archivo Example.java que contiene un FileDescriptorSet serializado a partir de un archivo Example.proto:

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"],
}

Puedes incluir el java_library resultante en tu app y usarlo junto con la biblioteca del Registro de publicadores configurables del SDK de Telemetría para registrar tu publicador.

También puedes compilar y ejecutar la herramienta de forma manual:

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run