Android XR هو امتداد لمنصة Android ومنظومتها المتكاملة. تم تصميم حزمة تطوير البرامج (SDK) لنظام Android XR لتتيح لك إنشاء تطبيقات الواقع الممتد باستخدام أُطر عمل وأدوات Android المألوفة أو باستخدام معايير مفتوحة، مثل OpenXR وWebXR. ستكون جميع تطبيقات الأجهزة الجوّالة أو تطبيقات الشاشات الكبيرة المتوافقة متاحة للتثبيت على سماعات الرأس بنظام الواقع الممتد من "متجر Play". راجِع اعتبارات التوافق لمعرفة ما إذا كان تطبيقك متوافقًا.
يشرح هذا الدليل الجوانب التالية:
- اختيار أدوات وتقنيات التطوير
- تصميم تطبيقات لنظام التشغيل Android XR
- ضبط ملف بيان التطبيق
- اعتبارات التوافق مع بيان التطبيق
- التعرّف على أذونات Android XR
- التحقّق من جودة تطبيقات Android XR
- تغليف تطبيقك وتوزيعه على Android XR
اختيار أدوات وتقنيات التطوير
عند إنشاء تطبيق لنظام Android XR، يمكنك الاختيار من بين منصات وأدوات التطوير التالية:
Jetpack XR SDK
تحتوي حزمة تطوير البرامج (SDK) لمنصة Jetpack XR على مكتبات Jetpack لنظام التشغيل Android XR، وهي مصمّمة للاستفادة من الإمكانات الفريدة لأجهزة الواقع الممتد. استخدِم حزمة تطوير البرامج (SDK) هذه إذا كنت تريد تنفيذ أيّ من الإجراءات التالية:
- تحسين تطبيق Android حالي على الأجهزة الجوّالة أو الأجهزة اللوحية
- إنشاء تطبيق Android XR جديد باستخدام "استوديو Android" وJetpack
إذا كنت معتادًا على التطوير باستخدام Android Jetpack، ستناسبك حزمة تطوير البرامج (SDK) لمنصة Jetpack XR. وهي مصمَّمة لتتكامل بسلاسة مع هذه الأُطر والمكتبات، وتتيح لك استخدام معرفتك الحالية لإنشاء تجارب XR غامرة.
مزيد من المعلومات حول تطوير التطبيقات باستخدام حزمة Jetpack XR SDK
Unity
Unity Engine هو محرك تطوير ثلاثي الأبعاد في الوقت الفعلي يتيح للفنانين والمصمّمين والمطوّرين التعاون لإنشاء تجارب غامرة وتفاعلية. تتيح لك ميزة Android XR في Unity التحكّم بشكل كبير في تجارب الواقع الثلاثي الأبعاد التي تطوّرها، مع الاستفادة من توافق Unity مع OpenXR ومنظومة المطوّرين المتكاملة.
إذا سبق لك إنشاء تجربة واقع مختلط باستخدام Unity أو إذا كنت على دراية بتطوير Unity، يمكنك البدء بهذا الخيار.
مزيد من المعلومات حول تطوير التطبيقات باستخدام Unity لنظام Android XR
OpenXR
OpenXR هو معيار مفتوح ومجاني يمكن استخدامه لإنشاء تجارب واقع ممتد عالية الأداء ومتوافقة مع منصات متعددة. يتوافق Android XR مع الإصدارَين 1.0 و1.1 من OpenXR، ونعمل على توسيع المواصفات من خلال إضافات جديدة لنظام Android XR. بما أنّ Android XR يستند إلى معايير مفتوحة، من المفترض أن تكون أدوات التطوير المتوافقة مع OpenXR وAndroid متوافقة أيضًا مع Android XR.
مزيد من المعلومات حول توافق OpenXR مع Android XR
WebXR
تتيح لك WebXR إنشاء تجارب غامرة على الويب. ويتيح الوصول إلى أجهزة الواقع الافتراضي (VR) والواقع المعزّز (AR) في متصفّحات الويب المتوافقة، مثل Chrome على Android XR.
استخدِم هذا الخيار إذا كنت تريد إنشاء تجربة XR على الويب أو إذا كنت تريد إضافة إمكانات XR إلى تطبيق ويب. ستعمل تجارب WebXR الحالية أيضًا على Android XR.
مزيد من المعلومات حول إنشاء تطبيقات ويب باستخدام WebXR
تصميم تطبيقات الواقع الممتد
توسّع تقنية XR مساحة التصميم لتتجاوز الشاشات المسطّحة التقليدية، ما يتيح لك تصميم تجارب غامرة تجمع بين الواقع المادي والواقع الافتراضي. سواء كنت بصدد إنشاء تجربة جديدة تمامًا أو إضافة عناصر غامرة إلى تطبيق حالي، يمكن أن يساعدك دليل تصميم تطبيقات Android XR في البدء.
ضبط ملف بيان التطبيق
كما هو الحال مع مشاريع تطبيقات Android الأخرى، يجب أن يتضمّن تطبيق Android XR ملف AndroidManifest.xml مع إعدادات بيان محدّدة. يصف ملف البيان المعلومات الأساسية عن تطبيقك لأدوات إنشاء Android ونظام التشغيل Android وGoogle Play. راجِع دليل نظرة عامة على بيان التطبيق لمزيد من المعلومات.
بالنسبة إلى تطبيقات XR المميّزة، يجب أن يحتوي ملف البيان على العناصر والسمات التالية:
السمة PROPERTY_XR_ACTIVITY_START_MODE
تتيح السمة android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
للنظام معرفة أنّه يجب تشغيل نشاط معيّن في وضع محدّد عند بدء النشاط.
تتضمّن هذه السمة ثلاث قيم محتملة:
XR_ACTIVITY_START_MODE_HOME_SPACE
(حزمة Jetpack XR SDK فقط)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(حزمة Jetpack XR SDK فقط)-
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(OpenXR فقط)
XR_ACTIVITY_START_MODE_HOME_SPACE
(التطبيقات المصمَّمة باستخدام حزمة Jetpack XR SDK فقط)
استخدِم وضع البدء هذا لتشغيل تطبيقك في "مساحة المنزل". في "مساحة المنزل الذكي"، يمكن تشغيل تطبيقات متعددة جنبًا إلى جنب، ما يتيح للمستخدمين إنجاز مهام متعددة. يمكن تشغيل أي تطبيق Android على الأجهزة الجوّالة أو الشاشات الكبيرة في "مساحة المنزل"، بالإضافة إلى تطبيقات XR التي تم إنشاؤها باستخدام حزمة Jetpack XR SDK.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
<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>
XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(التطبيقات المصمَّمة باستخدام حزمة Jetpack XR SDK فقط)
استخدِم وضع البدء هذا لتشغيل تطبيقك في "المساحة الكاملة". في وضع "المساحة الكاملة"، لا يتم تشغيل سوى تطبيق واحد في كل مرة، بدون حدود للمساحة، ويتم إخفاء جميع التطبيقات الأخرى.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
<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>
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(التطبيقات التي تم إنشاؤها باستخدام OpenXR فقط)
يتم تشغيل التطبيقات التي تم إنشاؤها باستخدام 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" />
</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>
<uses-native-library> OpenXR
(التطبيقات التي تم إنشاؤها باستخدام OpenXR فقط)
يجب أن تحدّد تطبيقات OpenXR استخدام مكتبة OpenXR الأصلية كي يتم تحميل وقت التشغيل بنجاح. بدون هذا البيان، سيتعذّر تحميل وقت التشغيل.
<manifest ... >
<application ... >
<uses-native-library andro id: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"، يمكنك تحديد ميزات الأجهزة أو البرامج المطلوبة في بيان التطبيق. يتيح العنصر
uses-feature
لـ "متجر Play" فلترة التطبيقات بشكل مناسب
المعروضة للمستخدمين.
الميزات التالية خاصة بالتطبيقات التي تختلف عن تطبيقات الواقع الممتد.
android.software.xr.api.spatial
يجب أن تتضمّن التطبيقات التي تم إنشاؤها باستخدام Jetpack XR SDK هذه الميزة في بيان التطبيق. تعتمد القيمة التي تحدّدها للسمة android:required
على قناة الإصدار لتطبيقك.
إذا كانت حِزم تطبيقك تتضمّن ميزات أو محتوى مخصّصًا لأجهزة XR في حزمة APK حالية للأجهزة الجوّالة وتم نشرها في قناة الإصدار المخصّصة للأجهزة الجوّالة، اضبط السمة android:required
على false
:
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
إذا كان تطبيقك مصمَّمًا خصيصًا للأجهزة المتوافقة مع الواقع الممتد وتم نشره في قناة الإصدار المحدود المخصّصة لتطبيقات Android XR، اضبط قيمة السمة android:required
على true
:
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.software.xr.api.openxr
يجب أن تتضمّن التطبيقات التي تستهدف منصة Android XR وتم إنشاؤها باستخدام OpenXR أو Unity هذه الميزة في بيان التطبيق مع ضبط السمة android:required
على true
.
لا تحتاج التطبيقات التي تستخدم حزمة إضافات Android XR لتطبيق Unity بالإصدار 1.0.0 أو إصدار أحدث أو حزمة Unity OpenXR: Android XR بالإصدار 0.5.0-exp.1 أو إصدار أحدث إلى إضافة هذا العنصر يدويًا إلى ملف بيان التطبيق. ستُدرج هاتان الحزمتان هذا العنصر في بيان التطبيق نيابةً عنك.
يمكن أن تحدّد الأجهزة إصدارًا لهذه الميزة، ما يشير إلى أحدث إصدار من OpenXR يتوافق معه الجهاز. تمثّل الـ 16 بت الأعلى الرقم الرئيسي، وتمثّل الـ 16 بت الأدنى الرقم الثانوي. على سبيل المثال،
لتحديد الإصدار 1.1 من OpenXR، سيتم ضبط القيمة على "0x00010001"
.
يمكن للتطبيقات استخدام إصدار الميزة للإشارة إلى الحد الأدنى من إصدار OpenXR الذي يتطلبه التطبيق. على سبيل المثال، إذا كان تطبيقك يتطلّب توفُّر الإصدار 1.1 من OpenXR، عليك تعريف الميزة التالية:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
تشير هذه الميزة إلى أنّ التطبيق يتطلّب إدخال بيانات من وحدة تحكّم في الحركة عالية الدقة ذات 6 درجات حرية ليعمل بشكل صحيح. إذا كان تطبيقك يتوافق مع وحدات التحكّم ولا يمكنه العمل بدونها، اضبط القيمة على 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" />
اعتبارات التوافق مع ملف البيان لتطبيقات الأجهزة الجوّالة وتطبيقات الشاشات الكبيرة
كما هو موضّح في قسم ميزات PackageManager لتطبيقات XR، تعلن التطبيقات عن استخدامها لميزة معيّنة من خلال تعريفها في عنصر <uses-feature>
في بيان التطبيق. قد لا تتوافق بعض الميزات، مثل خدمات الاتصال الهاتفي أو نظام تحديد المواقع العالمي (GPS)، مع جميع الأجهزة.
الميزات غير المتوافقة
تفلتر تطبيقات متجر Google Play المتاحة للتثبيت على جهاز باستخدام بيانات تعريف ميزات Android التالية.
مكونات الكاميرا
android.hardware.camera.autofocus
android.hardware.camera.capability.manual_post_processing
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.raw
android.hardware.camera.concurrent
android.hardware.camera.external
android.hardware.camera.level.full
إمكانية الاتصال
android.hardware.ipsec_tunnel_migration
إعداد الجهاز
إعدادات شكل الجهاز
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
الإدخال
android.software.input_methods
الموقع الجغرافي
اتصال قصير المدى
إعدادات الأمان والأجهزة
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
android.hardware.identity_credential
android.hardware.identity_credential_direct_access
android.hardware.keystore.limited_use_key
android.hardware.keystore.single_use_key
android.hardware.strongbox_keystore
أجهزة الاستشعار
android.hardware.sensor.accelerometer_limited_axes
android.hardware.sensor.accelerometer_limited_axes_uncalibrated
android.hardware.sensor.ambient_temperature
android.hardware.sensor.barometer
android.hardware.sensor.gyroscope_limited_axes
android.hardware.sensor.gyroscope_limited_axes_uncalibrated
android.hardware.sensor.heading
android.hardware.sensor.heartrate
android.hardware.sensor.heartrate.ecg
android.hardware.sensor.hinge_angle
android.hardware.sensor.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
إعدادات البرامج
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
الاتصالات الهاتفية
android.hardware.telephony.calling
android.hardware.telephony.cdma
android.hardware.telephony.data
android.hardware.telephony.euicc
android.hardware.telephony.euicc.mep
android.hardware.telephony.gsm
android.hardware.telephony.ims
android.hardware.telephony.mbms
android.hardware.telephony.messaging
android.hardware.telephony.radio.access
android.hardware.telephony.subscription
الواقع الافتراضي (قديم)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
التطبيقات المصغَّرة
التعرّف على أذونات الواقع الممتد (XR)
وكما هو الحال مع التطبيقات على الأجهزة الجوّالة وغيرها من أشكال الأجهزة، قد تتطلّب بعض الإمكانات التي توفّرها تطبيقات XR أن تحدّد الأذونات في ملف AndroidManifest الخاص بتطبيقك. في حالة الأذونات الخطيرة، قد يحتاج تطبيقك إلى طلب أذونات وقت التشغيل. يمكنك الاطّلاع على الأذونات على Android وأفضل الممارسات المتعلّقة بالأذونات للحصول على مزيد من المعلومات التفصيلية.
قد تستخدم تطبيقات الواقع الممتد الأذونات التالية. تُعدّ جميع الأذونات الواردة في هذا القسم أذونات خطيرة، لذا يجب الإفصاح عنها في ملف بيان التطبيق وطلبها في وقت التشغيل.
android.permission.EYE_TRACKING_COARSE
تمثّل هذه السمة وضع العين وحالتها واتجاهها، مثل استخدامها مع الصور الرمزية. استخدِم هذا الإذن عندما تحتاج إلى بيانات تتبُّع العين بدقة منخفضة.
Jetpack XR SDK
لا تنطبق
إضافات OpenXR
ميزات Unity
android.permission.EYE_TRACKING_FINE
تتبُّع حركة العين للاختيار والإدخال والتفاعلات
Jetpack XR SDK
لا تنطبق
إضافات OpenXR
ميزات Unity
android.permission.FACE_TRACKING
تتبُّع تعابير الوجه وعرضها
android.permission.HAND_TRACKING
تتبُّع أوضاع مفاصل اليدين والسرعات الزاوية والخطية، واستخدام تمثيل شبكي ليدَي المستخدم
Jetpack XR SDK
إضافات OpenXR
ميزات Unity
android.permission.SCENE_UNDERSTANDING_COARSE
تقدير الإضاءة، وعرض ميزة "الرؤية المجسّمة" على أسطح الشبكة، وتنفيذ عمليات تتبُّع الأشعة على العناصر القابلة للتتبُّع في البيئة، وتتبُّع الأسطح المستوية، وتتبُّع العناصر، والعناصر الثابتة
Jetpack XR SDK
إضافات OpenXR
ميزات Unity
android.permission.SCENE_UNDERSTANDING_FINE
نسيج العمق
التحقّق من جودة تطبيقات Android XR
للتحقّق من أنّ تطبيقك يقدّم تجربة رائعة للمستخدمين، راجِع إرشادات جودة تطبيقات Android XR.
تعبئة تطبيقك وتوزيعه على Android XR
يوفّر Android XR مجموعة كبيرة من التطبيقات والتجارب على سمّاعات رأس XR من خلال Google Play. في دليل إنشاء حِزم التطبيقات وتوزيعها على أجهزة Android XR، ستجد معلومات حول كيفية بدء استخدام "متجر Play" وPlay Console، ونشر قنوات الإصدار، وإعداد حِزم تطبيقات Android، وقيود حجم التطبيق.
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجّلتان كعلامة تجارية في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.