XR के लिए Jetpack Compose

Android XR की स्पेसियल सुविधाओं का फ़ायदा उठाने वाले स्पेसियल यूज़र इंटरफ़ेस (यूआई) लेआउट बनाएं.
नया अपडेट रिलीज़ किया गया जांचा और परखा हुआ वर्शन रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
7 मई, 2025 - - - 1.0.0-alpha04

डिपेंडेंसी का एलान करना

XR compose पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

ग्रूवीKotlin
dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha04"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha04"
}
dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha04")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha04")
}

डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

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

नई समस्या बनाना

ज़्यादा जानकारी के लिए, समस्या ट्रैकर का दस्तावेज़ देखें.

वर्शन 1.0

वर्शन 1.0.0-alpha04

7 मई, 2025

androidx.xr.compose:compose:1.0.0-alpha04 और androidx.xr.compose:compose-testing:1.0.0-alpha04 रिलीज़ हो गए हैं. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.

नई सुविधाएं

  • कस्टम SubspaceModifier टाइप को कॉम्पोज़िशन की लोकल वैल्यू ऐक्सेस करने की अनुमति देने के लिए, CompositionLocalConsumerSubspaceModifierNode इंटरफ़ेस जोड़ा गया.
  • एक नया SpatialPanel एपीआई जोड़ा गया है, जो कॉम्पोज़ AndroidView लागू करने के स्टाइल का पालन करता है और पिछले ViewBased SpatialPanel को बंद कर देता है.
  • VolumeConstraints.Unbounded कंपैनियन ऑब्जेक्ट जोड़ा गया, जो बिना किसी सीमा के पाबंदियों को दिखाता है.
  • स्पेसलाइज़ किए गए ऑडियो सोर्स की अनुमति देने के लिए, SubspaceModifier.onPointSourceParams जोड़ा गया.
  • एक सार्वजनिक ApplicationSubspace जोड़ा गया है. इसमें VolumeConstraints का विकल्प भी दिया गया है, ताकि 3D क्षेत्र को तय किया जा सके. इस क्षेत्र में ऐप्लिकेशन, स्पेसऐक्टिव कॉन्टेंट रेंडर कर सकता है. अगर कोई पाबंदी नहीं तय की गई है, तो डिफ़ॉल्ट रूप से सबस्पेस की चौड़ाई और ऊंचाई, SpatialUser के फ़ील्ड ऑफ़ व्यू के हिसाब से तय होगी. अगर फ़ील्ड ऑफ़ व्यू का पता नहीं चल पाता है, तो उपयोगकर्ता इस्तेमाल करने के लिए पाबंदियां दे सकते हैं. ऐसा न होने पर, फ़ील्ड ऑफ़ व्यू की चौड़ाई और ऊंचाई की डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है.
  • SpatialExternalSurface को जोड़ा गया, जिसका इस्तेमाल स्टीरियोस्कोपिक कॉन्टेंट को रेंडर करने के लिए किया जा सकता है. SpatialExternalSurface को मॉडिफ़ायर (अल्फ़ा को छोड़कर) और किनारे पर फ़ेदरिंग इफ़ेक्ट की मदद से पसंद के मुताबिक बनाया जा सकता है.
  • एक नया pointerHoverIcon सबस्पेस मॉडिफ़ायर जोड़ा गया है. इससे उपयोगकर्ता, स्पेसियल पॉइंटर के लिए आइकॉन सेट कर सकते हैं.

एपीआई में हुए बदलाव

  • Jetpack XR के सभी पैकेज पर RequiresApi(34) की पाबंदी हटा दी गई है. यह पाबंदी अब नहीं है, क्योंकि Jetpack XR फ़िलहाल सिर्फ़ एपीआई लेवल 34 और उसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है. (Iae0f8)
  • Kotlin 2.0 के साथ रिलीज़ किए गए प्रोजेक्ट का इस्तेमाल करने के लिए, KGP 2.0.0 या इसके बाद का वर्शन ज़रूरी है. (Idb6b5)
  • अब बैक हैंडल करने की सुविधा, एम्बेड की गई गतिविधियों के बिना स्पेस पैनल पर काम करेगी. बैक हैंडलिंग की सुविधा काम करे, इसके लिए आपको Android मेनिफ़ेस्ट में android:enableOnBackInvokedCallback="true" की जानकारी देनी होगी.
  • बैकहैंडलिंग की सुविधा अब स्पेस के हिसाब से डायलॉग पर काम करेगी. बैकहैंडलिंग की सुविधा काम करे, इसके लिए आपको Android मेनिफ़ेस्ट में android:enableOnBackInvokedCallback="true" की जानकारी देनी होगी.
  • कॉम्पोज़ और व्यू के आधार पर बने SpatialPanel, अब अपने कॉन्टेंट के हिसाब से साइज़ में बदल सकते हैं.
  • डेवलपर अब अपनी पसंद के मुताबिक SpatialElevationLevel वैल्यू सेट कर सकते हैं. इसके लिए, उन्हें पहले से तय किए गए लेवल का इस्तेमाल करने की ज़रूरत नहीं है.
  • अब elevation पैरामीटर की मदद से, ऑर्बिटर के ऊंचाई लेवल को पसंद के मुताबिक बनाया जा सकता है.
  • सबस्पेस की चौड़ाई और ऊंचाई, अब डिफ़ॉल्ट रूप से SpatialUser के फ़ील्ड ऑफ़ व्यू के हिसाब से तय की जा सकती है. अगर फ़ील्ड ऑफ़ व्यू का पता नहीं लगाया जा सकता, तो फ़ील्ड ऑफ़ व्यू की डिफ़ॉल्ट चौड़ाई और ऊंचाई की वैल्यू का इस्तेमाल किया जाता है.
  • Movable मॉडिफ़ायर में नए कॉलबैक onMoveStart और onMoveEnd जोड़े गए. onMoveStart और onMoveEnd कॉलबैक तब कॉल किए जाते हैं, जब उपयोगकर्ता, मूव किए जा सकने वाले मॉडिफ़ायर की मदद से, सबस्पेस कॉम्पोज़ेबल को मूव करना शुरू और खत्म करता है.
  • name पैरामीटर को SpatialRow और SpatialPanel जैसे स्पेस एपीआई से हटा दिया गया है. स्पेस में कॉम्पोज़ करने वाले ट्री को डीबग करने के लिए, SubspaceModifier.testTag का इस्तेमाल करें.
  • SpatialPopup का एक ऐसा ओवरलोड हटा दिया गया है जो काम नहीं करता. इसमें सिर्फ़ spatialElevationLevel और content हैं. कृपया onDimissRequest के साथ काम करने वाले इंटरफ़ेस का इस्तेमाल करें.
  • Movable modifier से onPoseChange कॉलबैक हटा दिया गया है. इसके बजाय, onMove का इस्तेमाल करें.
  • अगर SubspaceModifiers को हटाया जा रहा है या हटाया जा चुका है, तो वह अपने इफ़ेक्ट लागू नहीं करेगा.
  • मौजूदा SpatialRow API को SpatialRow और SpatialCurvedRow में बांट दिया गया है. अगर आपने पहले SpatialRow के curveRadius पैरामीटर का इस्तेमाल किया था, तो अब SpatialCurvedRow का इस्तेमाल करें. यह पैरामीटर भी वही काम करता है.
  • हाल ही की किसी सिस्टम इमेज पर MainPanel और ActivityPanel को चलाने पर, अब उनके टाइटल बार नहीं दिखते.
  • अल्फा और स्केल मॉडिफ़ायर अब स्टैक किए जा सकते हैं. साथ ही, लागू किए गए अल्फा या स्केल की वैल्यू के लिए, उनकी वैल्यू को गुणा कर दिया जाएगा.
  • Movable मॉडिफ़ायर से onPoseChange कॉलबैक को ऑप्टिमाइज़ किया गया है, ताकि पोज़ को आसानी से मूव किया जा सके.
  • अब, मूव किए जा सकने वाले और साइज़ में बदले जा सकने वाले मॉडिफ़ायर, मुख्य थ्रेड पर अपने कॉलबैक करेंगे. इससे यह पक्का होगा कि स्थिति में बदलाव होने पर, फिर से कॉम्पोज़ करने की प्रोसेस शुरू हो जाएगी.
  • लेआउट और मेज़रमेंट फ़ेज़ में स्टेटस ऑब्ज़र्वेशन जोड़ा गया, ताकि यह पक्का किया जा सके कि SubspaceLayout में स्टेटस में होने वाले बदलाव, रीलेआउट को ट्रिगर करेंगे.
  • मौजूदा मॉडिफ़ायर का बेहतर तरीके से फिर से इस्तेमाल करने के लिए, मॉडिफ़ायर चेन के अपडेट को ऑप्टिमाइज़ किया गया है.

गड़बड़ियां ठीक की गईं

  • SpatialDialog दिखने पर स्क्रीन को स्किम करना बंद कर दिया. (Ic4594)
  • मॉडिफ़ायर नोड अलग होने के दौरान, फिर से लेआउट करने के अनुरोधों को अब अनदेखा कर दिया जाएगा.
  • 'मोव किए जा सकने वाले' और 'साइज़ में बदले जा सकने वाले' मॉडिफ़ायर से ट्रिगर होने वाले, रीलेआउट के चरणों को हटा दिया गया है.
  • MainPanel() कॉम्पोज़ेबल में क्रैश होने की समस्या को ठीक किया गया. यह समस्या तब होती थी, जब कोई डाइमेंशन सीधे तौर पर या लेआउट कैलकुलेशन के दौरान, जैसे कि SpatialRow/SpatialColumn कैलकुलेशन के दौरान शून्य पर सेट होता था. इसके बजाय, पैनल अब छिपा दिया जाएगा. ध्यान दें कि यह सुधार खास तौर पर लेआउट फ़ेज़ के दौरान क्रैश होने की समस्या को ठीक करता है. उपयोगकर्ता के इंटरैक्शन की मदद से पैनल का साइज़ शून्य करने की समस्या को अलग से ठीक किया जाएगा. छिपे हुए पैनल में यूज़र इंटरफ़ेस (यूआई) की सुविधाएं नहीं हैं.
  • साइज़ बदलने की सुविधा वाले मॉडिफ़ायर से जुड़ी maintainAspectRatio की समस्या ठीक की गई. अब आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) नहीं बदलना चाहिए.
  • नेस्ट किए गए सबस्पेस से जुड़ी एक समस्या को ठीक किया गया है. इस समस्या की वजह से, एक फ़्रेम के लिए सबस्पेस गलत जगह पर दिखते थे.
  • उस समस्या को ठीक किया गया है जिसकी वजह से, राउंड किए गए कोने कभी-कभी लागू नहीं होते थे.
  • NestedSubspaces अब एक फ़्रेम के लिए गलत जगह पर नहीं दिखेगा.

वर्शन 1.0.0-alpha03

26 फ़रवरी, 2025

androidx.xr.compose:compose:1.0.0-alpha03 और androidx.xr.compose:compose-testing:1.0.0-alpha03 को पिछले अल्फा वर्शन के बाद से, कोई खास बदलाव किए बिना रिलीज़ किया गया है. वर्शन 1.0.0-alpha03 में ये कमिट शामिल हैं

वर्शन 1.0.0-alpha02

12 फ़रवरी, 2025

androidx.xr.compose:compose:1.0.0-alpha02 और androidx.xr.compose:compose-testing:1.0.0-alpha02 रिलीज़ हो गए हैं. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.

नई सुविधाएं

  • स्पेसिएल डायलॉग चालू होने पर, गतिविधि पैनल अब अपने कॉन्टेंट को स्क्रिम कर सकता है.
  • Orbiter API का इस्तेमाल अब SubspaceComposable कॉन्टेक्स्ट में किया जा सकता है. साथ ही, यह ऑर्बिटर को अपने सबसे नज़दीकी SubspaceLayout-आधारित कॉम्पोज़ेबल पैरंट से अटैच करेगा.
  • कस्टम पोज़िशनिंग पर आधारित मॉडिफ़ायर की अनुमति देने के लिए, LayoutCoordinatesAwareModifierNode को पेश किया गया.
  • SubspaceModifier.Node में लाइफ़साइकल के अटैच/डिटैच करने के तरीके जोड़े गए.
  • मूव किए जा सकने वाले मॉडिफ़ायर में scaleWithDistance जोड़ा गया. scaleWithDistance चालू होने पर, जिस सबस्पेस एलिमेंट को दूसरी जगह ले जाया गया है वह बड़ा या छोटा हो जाएगा. यह उस स्केल को भी बनाए रखेगा जो गतिविधि शुरू होने से पहले था.

एपीआई में हुए बदलाव

  • SessionCallbackProvider को हटाकर SpatialCapabilities को जोड़ा गया.

दूसरे बदलाव

  • minSDK को 24 पर सेट किया गया. सभी Jetpack XR API के लिए, रनटाइम के दौरान एपीआई 34 की ज़रूरत होती है.
  • Orbiter EdgeOffset.inner, EdgeOffset.outer, और EdgeOffset.overlap कन्स्ट्रक्टर अब @Composable तरीके नहीं हैं. इस वजह से, इनका इस्तेमाल ऐसे कॉन्टेक्स्ट में किया जा सकता है जो कंपोज़ नहीं किए जा सकते.
  • यूज़र एक्सपीरियंस (यूएक्स) की नई खास बातों के हिसाब से, स्पेसिएल एलिवेशन लेवल अपडेट करें.
  • MeasurableLayout में SubspaceSemanticsInfo इंटरफ़ेस लागू करें.
  • SubspaceModifierElement का नाम बदलकर SubspaceModifierNodeElement किया गया.

गड़बड़ियां ठीक की गईं

  • SubspaceModifier ऑर्डर करने की प्रोसेस को स्थिर करने के लिए सुधार. SubspaceModifier को ज़्यादा भरोसेमंद तरीके से काम करना चाहिए. ऑफ़सेट, घुमाएं, स्केल करें, मूव करें, और साइज़ बदलें मॉडिफ़ायर का इस्तेमाल अब किसी भी क्रम में किया जा सकता है.

वर्शन 1.0.0-alpha01

12 दिसंबर, 2024

androidx.xr.compose:compose-*1.0.0-alpha01 रिलीज़ हो गया है.

शुरुआती रिलीज़ की सुविधाएं

  • XR के लिए, Jetpack Compose की शुरुआती डेवलपर रिलीज़. XR में स्पेसिएल यूआई लेआउट बनाने के लिए, Compose के जाने-पहचाने कॉन्सेप्ट, जैसे कि पंक्तियों और कॉलम का इस्तेमाल करें. भले ही, आप किसी मौजूदा 2D ऐप्लिकेशन को XR में पोर्ट कर रहे हों या नए सिरे से कोई XR ऐप्लिकेशन बना रहे हों. इस लाइब्रेरी में, स्पेस पैनल और ऑर्बिटर जैसे स्पेसप्लेस और स्पेस कॉम्पोज़ेबल उपलब्ध हैं. इनकी मदद से, अपने मौजूदा 2D Compose या Views-आधारित यूज़र इंटरफ़ेस (यूआई) को स्पेस लेआउट में रखा जा सकता है. इसमें वॉल्यूम सबस्पेस कॉम्पोज़ेबल की सुविधा जोड़ी गई है. इसकी मदद से, अपने यूज़र इंटरफ़ेस (यूआई) के हिसाब से, SceneCore इकाइयों को रखा जा सकता है. जैसे, 3D मॉडल. ज़्यादा जानकारी के लिए, डेवलपर गाइड पढ़ें:

    • Subspace: इस कॉम्पोज़ेबल को आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की हैरारकी में कहीं भी रखा जा सकता है. इससे, फ़ाइलों के बीच कॉन्टेक्स्ट को खोए बिना, 2D और स्पेसिएल यूआई के लेआउट बनाए जा सकते हैं. इससे, XR और अन्य फ़ॉर्म फ़ैक्टर के बीच मौजूदा ऐप्लिकेशन आर्किटेक्चर जैसी चीज़ों को आसानी से शेयर किया जा सकता है. इसके लिए, आपको अपने पूरे यूज़र इंटरफ़ेस (यूआई) ट्री में स्टेटस को होस्ट करने या अपने ऐप्लिकेशन का आर्किटेक्चर फिर से बनाने की ज़रूरत नहीं है.

    • स्पेशल पैनल: स्पेशल पैनल, एक सबस्पेस कॉम्पोज़ेबल है. इसकी मदद से, ऐप्लिकेशन का कॉन्टेंट दिखाया जा सकता है. उदाहरण के लिए, स्पेशल पैनल में वीडियो प्लेबैक, स्टिल इमेज या कोई अन्य कॉन्टेंट दिखाया जा सकता है.

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

    • वॉल्यूम: अपने यूज़र इंटरफ़ेस (यूआई) के हिसाब से, SceneCore इकाइयों को रखें. जैसे, 3D मॉडल.

  • स्पेस लेआउट: SpatialRow, SpatialColumn, SpatialBox, और SpatialLayoutSpacer का इस्तेमाल करके, एक से ज़्यादा स्पेस पैनल बनाए जा सकते हैं और उन्हें स्पेस लेआउट में रखा जा सकता है. अपने लेआउट को पसंद के मुताबिक बनाने के लिए, SubspaceModifier का इस्तेमाल करें.

  • स्पेस के हिसाब से यूज़र इंटरफ़ेस (यूआई) के कॉम्पोनेंट: इन एलिमेंट का इस्तेमाल, आपके 2D यूआई में फिर से किया जा सकता है. साथ ही, इनके स्पेस के हिसाब से एट्रिब्यूट सिर्फ़ तब दिखेंगे, जब स्पेस के हिसाब से काम करने की सुविधाएं चालू हों.

    • SpatialDialog: पैनल, ज़्यादा ऊंचाई वाला डायलॉग दिखाने के लिए, z-डेप्थ में थोड़ा पीछे धकेल दिया जाएगा.
    • SpatialPopUp: पैनल, ज़्यादा ऊंचाई वाला पॉप-अप दिखाने के लिए, z-depth में थोड़ा पीछे धकेल दिया जाएगा
    • SpatialElevation: SpatialElevationLevel को ऊंचाई जोड़ने के लिए सेट किया जा सकता है.
  • SpatialCapabilities: जब उपयोगकर्ता आपके ऐप्लिकेशन या सिस्टम से इंटरैक्ट करते हैं, तो स्पेस की सुविधाओं में बदलाव हो सकता है. इसके अलावा, आपके ऐप्लिकेशन से भी इन सुविधाओं में बदलाव किया जा सकता है. उदाहरण के लिए, होम स्पेस या फ़ुल स्पेस में जाना. समस्याओं से बचने के लिए, आपके ऐप्लिकेशन को LocalSpatialCapabilities.current की जांच करनी होगी. इससे यह पता चलेगा कि मौजूदा एनवायरमेंट में कौनसे एपीआई काम करते हैं. isSpatialUiEnabled: स्पेशल यूज़र इंटरफ़ेस (यूआई) एलिमेंट (जैसे, SpatialPanel) isContent3dEnabled: 3D ऑब्जेक्ट isAppEnvironmentEnabled: एनवायरमेंट isPassthroughControlEnabled: ऐप्लिकेशन, पासथ्रू स्टेटस को कंट्रोल कर सकता है या नहीं isSpatialAudioEnabled: स्पेशल ऑडियो

ऐसी समस्याएं जिनकी जानकारी पहले से है

  • फ़िलहाल, XR के लिए Jetpack Compose का इस्तेमाल करने के लिए, कम से कम 30 वर्शन का SDK टूल होना ज़रूरी है. इस समस्या को हल करने के लिए, यहां दी गई मेनिफ़ेस्ट एंट्री <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> जोड़ें. इससे, ऐप्लिकेशन को 23 के मिनिमम SDK के साथ बनाया और चलाया जा सकेगा.
  • फ़िलहाल, Jetpack XR ऐप्लिकेशन के लिए AndroidManifest में android.permission.SCENE_UNDERSTANDING की अनुमति का अनुरोध करना ज़रूरी है.
  • जब कोई ऐप्लिकेशन अपने मेनिफ़ेस्ट में PROPERTY_XR_ACTIVITY_START_MODE प्रॉपर्टी का इस्तेमाल करके, सीधे फ़ुल स्पेस में लॉन्च होता है, तो ऐक्टिविटी/ऐप्लिकेशन शुरू में होम स्पेस में खुलते हैं. इसके बाद, वे फ़ुल स्पेस में ट्रांज़िशन करते हैं.
  • वॉल्यूम कॉम्पोज़ेबल में मौजूद glTF, शुरुआत में गलत जगह पर फ़्लिकर कर सकते हैं.
  • अगर किसी ऐसे पैनल में SpatialDialog का इस्तेमाल किया जाता है जिसे काफ़ी आगे या पीछे ले जाया गया है, तो कॉन्टेंट गलत दिशा में चला जाएगा.