قبل از شروع ساخت با افزونههای OpenXR پشتیبانیشده یا با یک موتور پشتیبانیشده، اطلاعات را مرور کنید و هرگونه وظیفهای را در بخشهای زیر انجام دهید تا مطمئن شوید که برنامه شما برای توسعه همهجانبه XR پیکربندی شده است.
فایل مانیفست برنامه خود را پیکربندی کنید
همانند سایر پروژههای اپلیکیشن اندروید، اپلیکیشن اندروید XR شما باید یک فایل AndroidManifest.xml با تنظیمات خاص manifest داشته باشد. فایل manifest اطلاعات ضروری در مورد اپلیکیشن شما را برای ابزارهای ساخت اندروید، سیستم عامل اندروید و گوگل پلی شرح میدهد. برای اطلاعات بیشتر به راهنمای نمای کلی manifest اپلیکیشن مراجعه کنید.
برای برنامههای متمایز XR ، فایل مانیفست شما باید شامل عناصر و ویژگیهای زیر باشد:
ویژگی 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 در حالت Full Space اجرا میشوند و باید از حالت شروع XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED استفاده کنند. حالت Unmanaged Full Space به اندروید 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" نشان میدهد که برنامه باید با نوع خاصی از مرز (border) راهاندازی شود. اگر برنامه شما طوری طراحی شده است که به کاربران اجازه میدهد در فضای فیزیکی خود حرکت کنند، باید 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 را اعلام کنند. بدون این اعلام ، محیط اجرا بارگذاری نمیشود.
<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 برای برنامههای XR
وقتی برنامهها را از طریق فروشگاه گوگل پلی توزیع میکنید ، میتوانید ویژگیهای سختافزاری یا نرمافزاری مورد نیاز را در مانیفست برنامه مشخص کنید. عنصر uses-feature به فروشگاه گوگل پلی اجازه میدهد تا برنامههای نمایش داده شده به کاربران را به طور مناسب فیلتر کند.
ویژگیهای زیر مختص برنامههای متمایز شده با XR هستند.
اندروید.software.xr.api.openxr
برنامههایی که پلتفرم اندروید XR را هدف قرار میدهند و با OpenXR یا Unity ساخته شدهاند، باید این ویژگی را در مانیفست برنامه با مقدار true برای ویژگی android:required لحاظ کنند.
برنامههایی که از بسته افزونههای اندروید XR برای یونیتی نسخه ۱.۰.۰ یا بالاتر یا بسته یونیتی OpenXR: اندروید XR نسخه ۰.۵.۰-exp.۱ یا بالاتر استفاده میکنند، لازم نیست این عنصر را به صورت دستی به مانیفست برنامه اضافه کنند. این دو بسته این عنصر را برای شما به مانیفست برنامه تزریق میکنند.
دستگاهها ممکن است برای این ویژگی، نسخهای را مشخص کنند که نشاندهندهی بالاترین نسخهی OpenXR پشتیبانیشده توسط دستگاه است. ۱۶ بیت بالاتر نشاندهندهی عدد اصلی و ۱۶ بیت پایینتر نشاندهندهی عدد فرعی هستند. برای مثال، برای مشخص کردن نسخهی ۱.۱ OpenXR، مقدار روی "0x00010001" تنظیم میشود.
برنامهها میتوانند از نسخه ویژگی برای نشان دادن حداقل نسخه OpenXR مورد نیاز برنامه استفاده کنند. برای مثال، اگر برنامه شما به پشتیبانی OpenXR نسخه ۱.۱ نیاز دارد، ویژگی زیر را اعلام کنید:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
کنترلر ورودی سختافزاری اندروید (xr)
این ویژگی نشان میدهد که برنامه برای عملکرد صحیح به ورودی از یک کنترلر حرکتی با دقت بالا و 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" />
ردیابی چشم در اندروید با سختافزار xr
این پرچم نشان میدهد که برنامه برای عملکرد صحیح ورودی به ردیابی چشم با دقت بالا نیاز دارد. اگر برنامه شما از ردیابی چشم برای ورودی پشتیبانی میکند و بدون آن نمیتواند کار کند، مقدار را روی 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" />
مراحل بعدی
اکنون که پیکربندی مانیفست برنامه خود را تمام کردهاید و اطلاعات مهم را بررسی کردهاید، روشهایی را که میتوانید با OpenXR بسازید، بررسی کنید: