Narzędzie do generowania deskryptorów protobuf w Javie

Aby zarejestrować wydawcę opartego na Javie w rejestrze wydawców z możliwością konfiguracji, musisz podać serializowany plik protobuf FileDescriptorSet zawierający definicję opublikowanej wiadomości protobuf. Więcej informacji znajdziesz w artykule Self-describing Messages (Wiadomości samodefinujące). Na urządzeniu dostępna jest jednak tylko „lekka” wersja biblioteki Java protobuf, która nie ma niezbędnych funkcji odbicia protobuf.

Aby rozwiązać ten problem, możesz użyć opisanego na tej stronie narzędzia do generowania deskryptora protobuf w języku Java, aby wygenerować niezbędne metadane w czasie kompilacji. Narzędzie to jest plikiem binarnym, który możesz skompilować i uruchomić ręcznie lub używać automatycznie w ramach kompilacji Androida.

To narzędzie generuje minimalną klasę Java zawierającą serializowany plik FileDescriptorSet reprezentujący plik protobuf (z rozszerzeniem .proto) i jego zależności. Zalecamy zintegrowanie go z procesem kompilacji za pomocą genruleAndroid.bp. Poniższy przykład pokazuje, jak wygenerować plik Example.java zawierający serializowany plik FileDescriptorSet z pliku 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"],
}

Możesz dołączyć wynikowy plik java_library do aplikacji i używać go w połączeniu z biblioteką rejestru wydawców z możliwością konfiguracji pakietu SDK do telemetrii, aby zarejestrować wydawcę.

Możesz też ręcznie skompilować i uruchomić narzędzie:

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run