Outil de génération de descripteurs protobuf Java

Pour enregistrer un éditeur basé sur Java dans le registre d'éditeurs configurables, vous devez fournir un fichier protobuf FileDescriptorSet sérialisé contenant la définition du message protobuf publié. Pour en savoir plus, consultez Messages autodescriptifs. Toutefois, sur l'appareil, seule la version "Lite" de la bibliothèque protobuf Java est disponible, qui ne dispose pas des capacités de réflexion protobuf nécessaires.

Pour résoudre ce problème, vous pouvez utiliser l'outil de génération de descripteurs protobuf Java décrit sur cette page afin de générer les métadonnées nécessaires au moment de la compilation. Cet outil est un binaire que vous pouvez compiler et exécuter manuellement, ou utiliser automatiquement dans le cadre de votre compilation Android.

Cet outil génère une classe Java minimale contenant le FileDescriptorSet sérialisé représentant un fichier protobuf (avec une extension .proto) et ses dépendances. Nous vous recommandons de l'intégrer à votre build à l'aide d'un genrule dans Android.bp. L'exemple suivant montre comment générer un fichier Example.java contenant un FileDescriptorSet sérialisé à partir d'un fichier 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"],
}

Vous pouvez inclure le java_library obtenu dans votre application et l'utiliser avec la bibliothèque Configurable Publisher Registry du SDK Telemetry pour enregistrer votre éditeur.

Vous pouvez également créer et exécuter l'outil manuellement :

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run