Strumento di generazione del descrittore protobuf Java

Per registrare un publisher basato su Java nel registro dei publisher configurabili, devi fornire un protobuf serializzato FileDescriptorSet contenente la definizione del messaggio protobuf pubblicato. Per ulteriori informazioni, consulta Messaggi autodescrittivi. Tuttavia, sul dispositivo è disponibile solo la versione "lite" della libreria protobuf Java, che non dispone delle funzionalità di reflection protobuf necessarie.

Per risolvere questo problema, puoi utilizzare lo strumento di generazione dei descrittori protobuf Java descritto in questa pagina per generare i metadati necessari in fase di compilazione. Lo strumento è un file binario che puoi compilare ed eseguire manualmente o utilizzare automaticamente come parte della build di Android.

Questo strumento genera una classe Java minima contenente il FileDescriptorSet serializzato che rappresenta un file protobuf (con estensione .proto) e le relative dipendenze. Ti consigliamo di integrarlo nella build utilizzando un genrule in Android.bp. L'esempio seguente mostra come generare un file Example.java contenente un FileDescriptorSet serializzato da un file 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"],
}

Puoi includere la java_library risultante nella tua app e utilizzarla insieme alla libreria del registro dei publisher configurabili dell' SDK Telemetry per registrare il tuo publisher.

Puoi anche compilare ed eseguire lo strumento manualmente:

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run