Для регистрации Java-издателя в реестре настраиваемых издателей необходимо предоставить сериализованный FileDescriptorSet protobuf, содержащий определение публикуемого сообщения protobuf. Дополнительную информацию см. в разделе «Самоописывающиеся сообщения» . Однако на устройстве доступна только «облегченная» версия библиотеки Java protobuf, в которой отсутствуют необходимые возможности рефлексии protobuf.
Для решения этой проблемы можно использовать описанный на этой странице инструмент генерации дескрипторов Java protobuf, который создаст необходимые метаданные во время сборки. Этот инструмент представляет собой исполняемый файл, который можно либо собрать и запустить вручную, либо использовать автоматически в процессе сборки Android-приложения.
Этот инструмент генерирует минимальный Java-класс, содержащий сериализованный FileDescriptorSet , представляющий собой файл protobuf (с расширением .proto ) и его зависимости. Мы рекомендуем интегрировать его в вашу сборку, используя genrule в Android.bp . Следующий пример показывает, как сгенерировать файл Example.java , содержащий сериализованный FileDescriptorSet из файла 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"],
}
Вы можете включить полученную java_library в свое приложение и использовать ее совместно с библиотекой Configurable Publisher Registry из Telemetry SDK для регистрации вашего издателя.
Вы также можете собрать и запустить инструмент вручную:
mm sdv_telemetry_sdk_descriptor_generator_java # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run