OpenXR के साथ काम करने वाले एक्सटेंशन या इंजन का इस्तेमाल करके ऐप्लिकेशन बनाना शुरू करने से पहले, यहां दिए गए सेक्शन में मेनिफ़ेस्ट कॉन्फ़िगरेशन और अनुमतियों से जुड़ी ज़रूरी शर्तें देखें. इससे यह पक्का किया जा सकेगा कि आपका ऐप्लिकेशन, XR डेवलपमेंट के लिए कॉन्फ़िगर किया गया है.
अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल को कॉन्फ़िगर करना
अन्य Android ऐप्लिकेशन प्रोजेक्ट की तरह ही, आपके Android XR ऐप्लिकेशन में भी एक AndroidManifest.xml फ़ाइल होनी चाहिए. इसमें मेनिफ़ेस्ट की खास सेटिंग होनी चाहिए. मेनिफ़ेस्ट फ़ाइल, Android बिल्ड टूल, Android ऑपरेटिंग सिस्टम, और Google Play को आपके ऐप्लिकेशन के बारे में ज़रूरी जानकारी देती है. ज़्यादा जानकारी के लिए, ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी वाली गाइड देखें.
एक्सआर के लिए खास तौर पर बनाए गए ऐप्लिकेशन के लिए, आपकी मेनिफ़ेस्ट फ़ाइल में ये एलिमेंट और एट्रिब्यूट होने चाहिए:
PROPERTY_XR_ACTIVITY_START_MODE प्रॉपर्टी
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" प्रॉपर्टी से सिस्टम को पता चलता है कि किसी गतिविधि को शुरू करते समय, उसे किसी खास मोड में लॉन्च किया जाना चाहिए.
इस प्रॉपर्टी की ये वैल्यू हैं:
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED(सिर्फ़ OpenXR)
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
OpenXR की मदद से बनाए गए ऐप्लिकेशन, फ़ुल स्पेस में लॉन्च होते हैं. इन्हें XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED स्टार्ट मोड का इस्तेमाल करना चाहिए. अनमैनेज्ड फ़ुल स्पेस, Android XR को सिग्नल भेजता है कि ऐप्लिकेशन, OpenXR का इस्तेमाल करता है.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
</intent-filter>
</activity>
</application>
</manifest>
PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED प्रॉपर्टी
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" प्रॉपर्टी से पता चलता है कि ऐप्लिकेशन को किसी खास तरह की बाउंड्री के साथ लॉन्च किया जाना चाहिए. आपके ऐप्लिकेशन को यह बताना होगा कि XR_BOUNDARY_TYPE_LARGE क्या इसे इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता अपने आस-पास की जगह में घूम सकें. XR_BOUNDARY_TYPE_NO_RECOMMENDATION की वैल्यू देने पर, सुरक्षा सीमा के टाइप के लिए कोई सुझाव नहीं मिलता. इसलिए, सिस्टम उस टाइप का इस्तेमाल करता है जो पहले से इस्तेमाल में है.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
स्पेशल कंटेनर प्रॉपर्टी
अगर आपका ऐप्लिकेशन, XR_EXT_spatial_container एक्सटेंशन (स्पेशल एपीआई लेवल 4 में पेश किया गया) का इस्तेमाल करके, कॉन्टेंट को पूरी तरह से इमर्सिव व्यू के साथ-साथ, सीमित 3D वॉल्यूम या 2D पैनल में दिखाता है, तो रनटाइम को लॉन्च करने के संकेत देने के लिए, <activity> या <application> लेवल पर, मेनिफ़ेस्ट की इन प्रॉपर्टी का एलान किया जा सकता है:
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES: इससे गतिविधि के लिए इस्तेमाल किए जाने वाले बाउंड मोड के बारे में पता चलता है. इन्हें|से अलग किया जाता है.मान्य मान हैं:
"2d_panel""bounded""immersive"
org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE: इससे पता चलता है कि लॉन्च होने पर, गतिविधि के लिए शुरुआती बाउंड मोड क्या होगा.मान्य मान हैं:
XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDEDXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_IMMERSIVEXR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_UNDEFINED
<manifest ... >
<application ... >
<activity
android:name="com.example.myapp.MainActivity" ... >
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_USED_BOUNDS_MODES"
android:value="bounded|immersive" />
<property
android:name="org.khronos.openxr.PROPERTY_ACTIVITY_HINT_XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE"
android:value="XR_SPATIAL_CONTAINER_INITIAL_BOUNDS_MODE_BOUNDED" />
</activity>
</application>
</manifest>
<uses-native-library> OpenXR
OpenXR ऐप्लिकेशन को नेटिव OpenXR लाइब्रेरी के इस्तेमाल का एलान करना होगा, ताकि इसके रनटाइम को लोड किया जा सके. इस एलान के बिना, रनटाइम लोड नहीं होता.
<manifest ... >
<application ... >
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
एक्सआर ऐप्लिकेशन के लिए PackageManager की सुविधाएं
Google Play Store के ज़रिए ऐप्लिकेशन उपलब्ध कराने पर, ऐप्लिकेशन मेनिफ़ेस्ट में ज़रूरी हार्डवेयर या सॉफ़्टवेयर की सुविधाओं के बारे में बताया जा सकता है. uses-feature एलिमेंट की मदद से, Play Store उपयोगकर्ताओं को दिखाए जाने वाले ऐप्लिकेशन को सही तरीके से फ़िल्टर कर पाता है.
यहां दी गई सुविधाएं, खास तौर पर एक्सआर की सुविधा वाले ऐप्लिकेशन के लिए हैं.
android.software.xr.api.openxr
Android XR प्लैटफ़ॉर्म को टारगेट करने वाले और OpenXR या Unity की मदद से बनाए गए ऐप्लिकेशन के लिए, यह ज़रूरी है कि वे ऐप्लिकेशन मेनिफ़ेस्ट में इस सुविधा को शामिल करें. साथ ही, android:required एट्रिब्यूट को true पर सेट करें.
Unity के लिए Android XR Extensions पैकेज के 1.0.0 या इसके बाद के वर्शन या Unity OpenXR: Android XR पैकेज के 0.5.0-exp.1 या इसके बाद के वर्शन का इस्तेमाल करने वाले ऐप्लिकेशन को, ऐप्लिकेशन मेनिफ़ेस्ट में इस एलिमेंट को मैन्युअल तरीके से जोड़ने की ज़रूरत नहीं होती. ये दोनों पैकेज, आपके लिए इस एलिमेंट को ऐप्लिकेशन मेनिफ़ेस्ट में इंजेक्ट करेंगे.
डिवाइस, इस सुविधा के लिए कोई वर्शन तय कर सकते हैं. इससे OpenXR के उस सबसे नए वर्शन का पता चलता है जो डिवाइस के साथ काम करता है. ऊपर की 16 बिट, मेजर नंबर को दिखाती हैं और नीचे की 16 बिट, माइनर नंबर को दिखाती हैं. उदाहरण के लिए, OpenXR वर्शन 1.1 के बारे में बताने के लिए, वैल्यू को "0x00010001" पर सेट किया जाएगा.
ऐप्लिकेशन, OpenXR के कम से कम ज़रूरी वर्शन के बारे में बताने के लिए, सुविधा के वर्शन का इस्तेमाल कर सकते हैं. उदाहरण के लिए, अगर आपके ऐप्लिकेशन को OpenXR के वर्शन 1.1 की ज़रूरत है, तो इस सुविधा के बारे में बताएं:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.software.xr.api.spatial
ऐसे OpenXR ऐप्लिकेशन जिन्हें Android XR के किसी खास Spatial API वर्शन में उपलब्ध एक्सटेंशन की ज़रूरत होती है वे android.software.xr.api.spatial सुविधा का एलान कर सकते हैं. इसके लिए, उन्हें android:version को Spatial API के ज़रूरी लेवल पर सेट करना होगा. जैसे, "1", "2", "3" या "4". हर एक्सटेंशन के लिए ज़रूरी Spatial API वर्शन देखने के लिए, OpenXR के साथ काम करने वाले एक्सटेंशन की मदद से ऐप्लिकेशन बनाना लेख पढ़ें.
<!-- Indicates that the app requires Android XR Spatial API Level 4 or higher. -->
<uses-feature android:name="android.software.xr.api.spatial"
android:version="4"
android:required="true" />
android.hardware.xr.input.controller
इस सुविधा से पता चलता है कि ऐप्लिकेशन को सही तरीके से काम करने के लिए, ज़्यादा सटीक, 6DoF (डिग्रीज़ ऑफ़ फ़्रीडम) मोशन कंट्रोलर से इनपुट की ज़रूरत होती है. अगर आपका ऐप्लिकेशन कंट्रोलर के साथ काम करता है और उनके बिना काम नहीं कर सकता, तो वैल्यू को true पर सेट करें.
अगर आपका ऐप्लिकेशन कंट्रोलर के साथ काम करता है, लेकिन उनके बिना भी काम कर सकता है, तो उसे false पर सेट करें.
<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
इस फ़्लैग से पता चलता है कि ऐप्लिकेशन को सही तरीके से काम करने के लिए, हाथ ट्रैक करने की सुविधा की ज़रूरत है. इसमें उपयोगकर्ता के हाथ के जोड़ों की पोज़िशन, ओरिएंटेशन, और वेलोसिटी शामिल है. अगर आपका ऐप्लिकेशन, हाथ ट्रैक करने की सुविधा के साथ काम करता है और इसके बिना काम नहीं कर सकता, तो वैल्यू को true पर सेट करें. अगर आपके ऐप्लिकेशन में हाथ ट्रैक करने की सुविधा काम करती है, लेकिन वह इसके बिना भी काम कर सकता है, तो इसे false पर सेट करें.
<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
इस फ़्लैग से पता चलता है कि ऐप्लिकेशन को सही तरीके से काम करने के लिए, हाई-फ़िडेलिटी वाली आई ट्रैकिंग की सुविधा की ज़रूरत है. अगर आपका ऐप्लिकेशन, इनपुट के लिए आई ट्रैकिंग की सुविधा के साथ काम करता है और इसके बिना काम नहीं कर सकता, तो वैल्यू को true पर सेट करें. अगर आपका ऐप्लिकेशन इनपुट के लिए आई ट्रैकिंग की सुविधा के साथ काम करता है, लेकिन इसके बिना भी काम कर सकता है, तो इसे false पर सेट करें.
<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
android.hardware.xr.input.face_tracking
इस फ़्लैग से पता चलता है कि ऐप्लिकेशन को सही तरीके से काम करने के लिए, चेहरा ट्रैक करने की सुविधा वाले हार्डवेयर की ज़रूरत है. अगर आपका ऐप्लिकेशन, चेहरा ट्रैक करने की सुविधा के साथ काम करता है और इसके बिना काम नहीं कर सकता, तो वैल्यू को true पर सेट करें. अगर आपके ऐप्लिकेशन में चेहरा ट्रैक करने की सुविधा काम करती है, लेकिन वह इसके बिना भी काम कर सकता है, तो इसे false पर सेट करें.
<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />
android.hardware.location.gps
इस फ़्लैग से पता चलता है कि ऐप्लिकेशन, डिवाइस पर जीपीएस की मदद से जगह की सटीक जानकारी का इस्तेमाल करता है. जैसे, जियोस्पेशल OpenXR एक्सटेंशन (XR_ANDROID_geospatial और XR_ANDROID_geospatial_anchor) का इस्तेमाल करते समय. अगर आपका ऐप्लिकेशन जीपीएस हार्डवेयर के बिना काम नहीं कर सकता, तो android:required को true पर सेट करें. अगर वह इसके बिना काम कर सकता है, तो false पर सेट करें.
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
OpenXR के लिए अनुमतियों के बारे में जानकारी
कई OpenXR एक्सटेंशन, निजता से जुड़े संवेदनशील सेंसर डेटा और सुविधाओं को ऐक्सेस करते हैं. इन एक्सटेंशन का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को अपनी AndroidManifest.xml फ़ाइल में ज़रूरी <uses-permission> एलिमेंट का एलान करना होगा. साथ ही, OpenXR के फ़ंक्शन को कॉल करने से पहले, रनटाइम के दौरान खतरनाक अनुमतियों का अनुरोध करना होगा.
<manifest ... >
<!-- Example dangerous permissions required by specific OpenXR extensions -->
<uses-permission android:name="android.permission.SCENE_UNDERSTANDING_COARSE" />
<uses-permission android:name="android.permission.HAND_TRACKING" />
...
</manifest>
यहां दी गई टेबल में, Android की उन खतरनाक अनुमतियों की खास जानकारी दी गई है जो Android XR पर काम करने वाले OpenXR एक्सटेंशन के लिए ज़रूरी हैं. सभी SDK टूल में एक्सआर की अनुमतियों के बारे में पूरी जानकारी पाने के लिए, एक्सआर की अनुमतियों के बारे में जानें.
अनुमति |
सुविधाएं |
OpenXR एक्सटेंशन |
|---|---|---|
आंखों की पोज़िशन, स्थिति, और ओरिएंटेशन की कम सटीक जानकारी (जैसे, अवतार के लिए). |
|
|
आई ट्रैकिंग की सुविधा की मदद से, आंखों के मूवमेंट को सटीक तरीके से ट्रैक किया जा सकता है. इससे, किसी आइटम को चुनने, इनपुट देने, और इंटरैक्ट करने में मदद मिलती है. साथ ही, आई ट्रैकिंग की सुविधा की मदद से, फ़ोविएटेड रेंडरिंग की सुविधा का इस्तेमाल किया जा सकता है. |
|
|
चेहरे के ब्लेंड शेप को ट्रैक करना और चेहरे के हाव-भाव रेंडर करना. |
||
ऑडियो के आधार पर चेहरा ट्रैक करने की सुविधा वाले डेटा सोर्स के लिए ऑडियो इनपुट. |
||
हाथ के जोड़ों के पोज़, गति, निशाना लगाने की स्थिति, और हाथ के मेश रिप्रज़ेंटेशन को ट्रैक करना. |
||
शरीर के जोड़ों के पोज़ और कंकाल के अनुपात को ट्रैक करना. |
||
प्लेन ट्रैकिंग, ऑब्जेक्ट ट्रैकिंग, इमेज/मार्कर/क्यूआर कोड ट्रैकिंग, ऐंकर, परसिस्टेंस, ट्रैक किए जा सकने वाले ऑब्जेक्ट के लिए रेकास्टिंग, लाइट एस्टिमेशन, और पासथ्रू मेश. |
|
|
डेप्थ टेक्सचर, सीन मेशिंग, क्यूबमैप लाइट एस्टिमेशन, डेप्थ रेकास्टिंग, और स्पेशल एनोटेशन. |
||
जियोस्पेशल ट्रैकिंग और ऐंकर के लिए, पृथ्वी के हिसाब से सटीक जगह और ओरिएंटेशन. |
अगले चरण
अपने ऐप्लिकेशन के मेनिफ़ेस्ट को कॉन्फ़िगर करने और ज़रूरी जानकारी की समीक्षा करने के बाद, OpenXR की मदद से ऐप्लिकेशन बनाने के तरीके जानें:
- इस्तेमाल किए जा सकने वाले OpenXR एक्सटेंशन की मदद से ऐप्लिकेशन बनाना
- इस्तेमाल किए जा सकने वाले इंजन की मदद से गेम बनाना