Java protobuf डिस्क्रिप्टर जनरेटर टूल

Java पर आधारित पब्लिशर को कॉन्फ़िगर किए जा सकने वाले पब्लिशर रजिस्ट्री में रजिस्टर करने के लिए, आपको क्रम से लगाया गया protobuf FileDescriptorSet उपलब्ध कराना होगा. इसमें पब्लिश किए गए protobuf मैसेज की डेफ़िनिशन शामिल होती है. ज़्यादा जानकारी के लिए, खुद के बारे में बताने वाले मैसेज देखें. हालांकि, उपयोगकर्ता के डिवाइस पर, Java protobuf लाइब्रेरी का सिर्फ़ "लाइट" वर्शन उपलब्ध है. इसमें ज़रूरी protobuf रिफ़्लेक्शन की सुविधाएं मौजूद नहीं हैं.

इस समस्या को हल करने के लिए, इस पेज पर बताए गए Java protobuf डेस्क्रिप्टर जनरेटर टूल का इस्तेमाल करके, बिल्ड प्रोसेस में लगने वाले समय के दौरान ज़रूरी मेटाडेटा जनरेट किया जा सकता है. यह टूल एक बाइनरी है. इसे मैन्युअल तरीके से बनाया और चलाया जा सकता है. इसके अलावा, इसे Android बिल्ड के हिस्से के तौर पर, अपने-आप भी इस्तेमाल किया जा सकता है.

यह टूल, क्रम से लगाए गए FileDescriptorSet वाली एक छोटी Java क्लास जनरेट करता है. यह क्लास, protobuf फ़ाइल (जिसका एक्सटेंशन .proto होता है) और उसकी डिपेंडेंसी को दिखाती है. हमारा सुझाव है कि इसे Android.bp में genrule का इस्तेमाल करके, अपने बिल्ड में इंटिग्रेट करें. यहां दिए गए उदाहरण में, Example.proto फ़ाइल से क्रम से लगाए गए FileDescriptorSet वाली Example.java फ़ाइल जनरेट करने का तरीका बताया गया है:

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 library of the Telemetry SDK के साथ किया जा सकता है.

इस टूल को मैन्युअल तरीके से भी बनाया और चलाया जा सकता है:

mm sdv_telemetry_sdk_descriptor_generator_java     # Build
sdv_telemetry_sdk_descriptor_generator_java --help # Run