如要向可設定的發布者登錄檔註冊 Java 型發布者,您必須提供序列化 protobuf FileDescriptorSet,其中包含已發布 protobuf 訊息的定義。詳情請參閱「自我描述訊息」。不過,裝置端只有「精簡」版的 Java protobuf 程式庫,缺少必要的 protobuf 反射功能。
如要解決這個問題,您可以使用本頁所述的 Java protobuf 描述元產生器工具,在建構時產生必要的中繼資料。這個工具是二進位檔,您可以手動建構及執行,也可以在 Android 建構時自動使用。
這項工具會產生包含序列化 FileDescriptorSet 的精簡 Java 類別,代表 protobuf 檔案 (副檔名為 .proto) 及其依附元件。建議使用 genrule 將其整合至 Android.bp 的建構作業。以下範例說明如何從 Example.proto 檔案產生 Example.java 檔案,其中包含序列化的 FileDescriptorSet:
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 納入應用程式,並搭配 Telemetry SDK 的可設定發布商登錄程式庫使用,藉此註冊發布商。
您也可以手動建構及執行這項工具:
mm sdv_telemetry_sdk_descriptor_generator_java # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run