टाइल के वर्शन

Wear OS डिवाइसों पर, टाइल दो मुख्य कॉम्पोनेंट की मदद से रेंडर की जाती हैं. ये कॉम्पोनेंट, अलग-अलग वर्शन के साथ काम करते हैं. यह पक्का करने के लिए कि आपके ऐप्लिकेशन की टाइल सभी डिवाइसों पर सही तरीके से काम करें, इस आर्किटेक्चर को समझना ज़रूरी है.

  • Jetpack टाइल से जुड़ी लाइब्रेरी: ये लाइब्रेरी (इनमें Wear टाइल और Wear ProtoLayout शामिल हैं) आपके ऐप्लिकेशन में एम्बेड होती हैं. साथ ही, डेवलपर के तौर पर आपके पास इनके वर्शन को कंट्रोल करने का विकल्प होता है. आपका ऐप्लिकेशन, सिस्टम के onTileRequest() कॉल के जवाब में, TileBuilder.Tile ऑब्जेक्ट (आपकी टाइल को दिखाने वाला डेटा स्ट्रक्चर) बनाने के लिए, इन लाइब्रेरी का इस्तेमाल करता है.
  • ProtoLayout रेंडरर: यह सिस्टम कॉम्पोनेंट, डिसप्ले पर Tile ऑब्जेक्ट को रेंडर करने और उपयोगकर्ता इंटरैक्शन को मैनेज करने के लिए ज़िम्मेदार है. रेंडरर के वर्शन को ऐप्लिकेशन डेवलपर कंट्रोल नहीं करता. यह अलग-अलग डिवाइसों पर अलग-अलग हो सकता है. भले ही, उन डिवाइसों का हार्डवेयर एक जैसा हो.

आपके ऐप्लिकेशन के Jetpack Tiles लाइब्रेरी के वर्शन और उपयोगकर्ता के डिवाइस पर मौजूद ProtoLayout रेंडरर के वर्शन, दोनों के आधार पर टाइल का दिखना या काम करने का तरीका अलग-अलग हो सकता है. उदाहरण के लिए, हो सकता है कि एक डिवाइस पर रोटेशन की सुविधा काम करे या धड़कन की दर का डेटा दिखे, लेकिन दूसरे डिवाइस पर ऐसा न हो.

इस दस्तावेज़ में यह पक्का करने का तरीका बताया गया है कि आपका ऐप्लिकेशन, Tiles लाइब्रेरी और ProtoLayout रेंडरर के अलग-अलग वर्शन के साथ काम करता है. साथ ही, इसमें Jetpack लाइब्रेरी के नए वर्शन पर माइग्रेट करने का तरीका भी बताया गया है.

डिवाइसों के साथ काम करने की क्षमता

अलग-अलग डिवाइसों पर सही तरीके से काम करने वाली टाइल बनाने के लिए, आपको इन बातों का ध्यान रखना चाहिए.

रेंडरर के वर्शन का पता लगाना

  • onTileRequest() तरीके में पास किए गए DeviceParameters ऑब्जेक्ट के getRendererSchemaVersion() तरीके का इस्तेमाल करें. यह तरीका, डिवाइस पर ProtoLayout रेंडरर के मेजर और माइनर वर्शन नंबर दिखाता है.
  • इसके बाद, onTileRequest() लागू करने के लिए कंडीशनल लॉजिक का इस्तेमाल किया जा सकता है. इससे, टाइल के डिज़ाइन या व्यवहार को, रेंडरर के पता लगाए गए वर्शन के आधार पर अडजस्ट किया जा सकता है.
    • उदाहरण के लिए, अगर कोई खास ऐनिमेशन काम नहीं करता है, तो उसकी जगह पर स्टैटिक इमेज दिखाई जा सकती है.

@RequiresSchemaVersion एनोटेशन

  • ProtoLayout के तरीकों पर मौजूद @RequiresSchemaVersion एनोटेशन से पता चलता है कि उस तरीके के काम करने के लिए, रेंडरर स्कीमा का कम से कम कौनसा वर्शन ज़रूरी है, जैसा कि दस्तावेज़ में बताया गया है (उदाहरण).
    • अगर किसी ऐसे तरीके को कॉल किया जाता है जिसके लिए डिवाइस पर उपलब्ध रेंडरर वर्शन से ज़्यादा वर्शन की ज़रूरत होती है, तो आपका ऐप्लिकेशन क्रैश नहीं होगा. हालांकि, इससे कॉन्टेंट न दिखने या सुविधा को अनदेखा किए जाने की समस्या हो सकती है.

उदाहरण

override fun onTileRequest(
    requestParams: TileService.TileRequest
): ListenableFuture<Tile> {
    val rendererVersion =
        requestParams.deviceConfiguration.rendererSchemaVersion
    val tile = Tile.Builder()

    if (
        rendererVersion.major > 1 ||
            (rendererVersion.major == 1 && rendererVersion.minor >= 300)
    ) {
        // Use a feature supported in renderer version 1.300 or later
        tile.setTileTimeline(/* ... */ )
    } else {
        // Provide fallback content for older renderers
        tile.setTileTimeline(/* ... */ )
    }

    return Futures.immediateFuture(tile.build())
}

रेंडरर के अलग-अलग वर्शन के साथ टेस्ट करना

अपनी टाइल को रेंडरर के अलग-अलग वर्शन के साथ टेस्ट करने के लिए, उन्हें Wear OS एमुलेटर के अलग-अलग वर्शन पर डिप्लॉय करें. (फ़िज़िकल डिवाइसों पर, ProtoLayout रेंडरर के अपडेट, Play Store या सिस्टम अपडेट से डिलीवर किए जाते हैं. किसी खास रेंडरर वर्शन को इंस्टॉल करने के लिए, उसे ज़बरदस्ती नहीं किया जा सकता.)

Android Studio की टाइल की झलक देखने की सुविधा, 'Jetpack ProtoLayout' लाइब्रेरी में एम्बेड किए गए रेंडरर का इस्तेमाल करती है. आपका कोड इस लाइब्रेरी पर निर्भर करता है. इसलिए, टाइल की जांच करते समय, 'Jetpack' लाइब्रेरी के अलग-अलग वर्शन का इस्तेमाल किया जा सकता है.

Jetpack लाइब्रेरी अपग्रेड करना

नई सुविधाओं का फ़ायदा पाने के लिए, अपनी Jetpack टाइल लाइब्रेरी अपडेट करें. इनमें यूज़र इंटरफ़ेस (यूआई) में किए गए बदलाव भी शामिल हैं, ताकि आपकी टाइल सिस्टम के साथ आसानी से इंटिग्रेट हो सकें.

Tiles 1.2 / ProtoLayout 1.0 पर माइग्रेट करना

वर्शन 1.2 के हिसाब से, ज़्यादातर टाइल लेआउट एपीआई, androidx.wear.protolayout नेमस्पेस में हैं. नए एपीआई का इस्तेमाल करने के लिए, अपने कोड में माइग्रेशन के लिए यह तरीका अपनाएं.

डिपेंडेंसी अपडेट करना

अपने ऐप्लिकेशन मॉड्यूल की बिल्ड फ़ाइल में, ये बदलाव करें:

Groovy

  // Remove
  implementation 'androidx.wear.tiles:tiles-material:version'

  // Include additional dependencies
  implementation "androidx.wear.protolayout:protolayout:1.2.1"
  implementation "androidx.wear.protolayout:protolayout-material:1.2.1"
  implementation "androidx.wear.protolayout:protolayout-expression:1.2.1"

  // Update
  implementation "androidx.wear.tiles:tiles:1.4.1"

Kotlin

  // Remove
  implementation("androidx.wear.tiles:tiles-material:version")

  // Include additional dependencies
  implementation("androidx.wear.protolayout:protolayout:1.2.1")
  implementation("androidx.wear.protolayout:protolayout-material:1.2.1")
  implementation("androidx.wear.protolayout:protolayout-expression:1.2.1")

  // Update
  implementation("androidx.wear.tiles:tiles:1.4.1")

नेमस्पेस अपडेट करना

अपने ऐप्लिकेशन की Kotlin और Java-आधारित कोड फ़ाइलों में, ये अपडेट करें. इसके अलावा, नेमस्पेस का नाम बदलने वाली स्क्रिप्ट को भी चलाया जा सकता है.

  1. सभी androidx.wear.tiles.material.* इंपोर्ट को androidx.wear.protolayout.material.* से बदलें. androidx.wear.tiles.material.layouts लाइब्रेरी के लिए भी यह चरण पूरा करें.
  2. ज़्यादातर अन्य androidx.wear.tiles.* इंपोर्ट को androidx.wear.protolayout.* से बदलें.

    androidx.wear.tiles.EventBuilders, androidx.wear.tiles.RequestBuilders, androidx.wear.tiles.TileBuilders, और androidx.wear.tiles.TileService के लिए इंपोर्ट में कोई बदलाव नहीं होना चाहिए.

  3. TileService और TileBuilder क्लास के कुछ ऐसे तरीकों के नाम बदलें जो अब काम नहीं करते:

    1. TileBuilders: getTimeline() से getTileTimeline() और setTimeline() से setTileTimeline()
    2. TileService: onResourcesRequest() से onTileResourcesRequest() तक
    3. RequestBuilders.TileRequest: getDeviceParameters() से getDeviceConfiguration(), setDeviceParameters() से setDeviceConfiguration(), getState() से getCurrentState(), और setState() से setCurrentState()