Omówienie kompilowania aplikacji na Androida XR

Android XR to rozszerzenie platformy i ekosystemu Androida. Pakiet SDK Androida XR umożliwia tworzenie aplikacji XR przy użyciu znanych platform i narzędzi Androida lub otwartych standardów, takich jak OpenXR i WebXR. Wszystkie zgodne aplikacje mobilne i na duże ekrany będzie można zainstalować na goglach XR ze Sklepu Play. Zapoznaj się z informacjami o zgodności, aby sprawdzić, czy Twoja aplikacja jest zgodna z wymaganiami.

W tym przewodniku znajdziesz informacje na te tematy:

  • Wybieranie narzędzi i technologii programistycznych
  • Tworzenie aplikacji na Androida XR
  • Konfigurowanie pliku manifestu aplikacji
  • Kwestie związane ze zgodnością manifestu aplikacji
  • Informacje o uprawnieniach w Androidzie XR
  • Weryfikowanie jakości aplikacji na Androida XR
  • Pakowanie i dystrybucja aplikacji na Androida XR

Wybierz narzędzia i technologie programistyczne

Podczas tworzenia aplikacji na Androida XR możesz wybierać spośród tych platform i technologii:

Jetpack XR SDK

Pakiet SDK Jetpack XR zawiera biblioteki Jetpack Androida XR, które zostały opracowane z myślą o wykorzystaniu unikalnych możliwości urządzeń XR. Zacznij od tego pakietu SDK, jeśli chcesz wykonać jedną z tych czynności:

  • Optymalizowanie lub ulepszanie istniejącej aplikacji na telefon lub tablet z Androidem
  • Tworzenie nowej aplikacji na Androida XR za pomocą Androida Studio i Jetpacka

Jeśli znasz już Androida Jetpack, pakiet SDK Jetpack XR będzie dla Ciebie naturalnym wyborem. Został zaprojektowany tak, aby płynnie integrować się z tymi platformami i bibliotekami, oraz umożliwia wykorzystanie dotychczasowej wiedzy do tworzenia wciągających środowisk XR.

Więcej informacji o programowaniu z użyciem pakietu Jetpack XR SDK

Unity

Unity Engine to silnik do tworzenia trójwymiarowych treści w czasie rzeczywistym, który umożliwia artystom, projektantom i programistom współpracę przy tworzeniu interaktywnych treści. Obsługa Androida XR w Unity zapewnia wysoki poziom kontroli nad tworzonymi środowiskami 3D, a jednocześnie pozwala korzystać z ustalonej obsługi OpenXR i ekosystemu deweloperskiego Unity.

Jeśli masz już środowisko XR utworzone w Unity lub znasz to środowisko, zacznij od tej opcji.

Więcej informacji o tworzeniu aplikacji na Androida XR za pomocą Unity

OpenXR

OpenXR to bezpłatny, otwarty standard, którego można używać do tworzenia wydajnych, wieloplatformowych aplikacji XR. Android XR obsługuje OpenXR 1.0 i 1.1, a specyfikację rozszerzamy o nowe rozszerzenia dla Androida XR. Android XR jest oparty na otwartych standardach, więc narzędzia deweloperskie obsługujące OpenXR i Androida powinny być z nim zgodne.

Więcej informacji o obsłudze OpenXR na Androidzie XR

WebXR

WebXR umożliwia tworzenie wciągających interfejsów internetowych. Umożliwia dostęp do urządzeń VR i AR w kompatybilnych przeglądarkach, takich jak Chrome na Androidzie XR.

Zacznij od tej opcji, jeśli chcesz utworzyć rozwiązanie XR na potrzeby internetu lub dodać funkcje XR do aplikacji internetowej. Istniejące rozwiązania WebXR będą też działać na Androidzie XR.

Więcej informacji o tworzeniu aplikacji internetowych za pomocą WebXR

Projektowanie pod kątem XR

XR rozszerza obszar projektowania poza tradycyjne płaskie ekrany. Możesz projektować immersyjne interfejsy, które łączą rzeczywistość fizyczną i wirtualną. Niezależnie od tego, czy tworzysz zupełnie nowe środowisko, czy dodajesz elementy immersyjne do istniejącej aplikacji, przewodnik po projektowaniu na Androida XR pomoże Ci zacząć.

Konfigurowanie pliku manifestu aplikacji

Podobnie jak w przypadku innych projektów aplikacji na Androida, aplikacja na Androida XR musi mieć plik AndroidManifest.xml z określonymi ustawieniami pliku manifestu. Plik manifestu zawiera podstawowe informacje o aplikacji dla narzędzi do kompilacji Androida, systemu operacyjnego Android i Google Play. Więcej informacji znajdziesz w przewodniku po pliku manifestu aplikacji.

W przypadku aplikacji z różnicami w zakresie XR plik manifestu musi zawierać te elementy i atrybuty:

Właściwość PROPERTY_XR_ACTIVITY_START_MODE

Właściwość android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" informuje system, że aktywność powinna być uruchamiana w określonym trybie.

Ta właściwość może mieć 3 wartości:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (tylko pakiet Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (tylko pakiet Jetpack XR SDK)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (tylko OpenXR)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Dotyczy tylko aplikacji utworzonych za pomocą pakietu Jetpack XR SDK)

Użyj tego trybu uruchamiania, aby uruchomić aplikację w przestrzeni domowej. W przestrzeni domowej można uruchamiać kilka aplikacji obok siebie, co umożliwia użytkownikom wykonywanie wielu zadań jednocześnie. W przestrzeni domowej mogą działać wszystkie aplikacje na Androida na urządzenia mobilne i duże ekrany, a także aplikacje XR utworzone za pomocą pakietu 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

(Dotyczy tylko aplikacji utworzonych za pomocą pakietu Jetpack XR SDK)

Użyj tego trybu uruchamiania, aby otworzyć aplikację w pełnej przestrzeni. W przestrzeni pełnej działa tylko jedna aplikacja naraz, bez ograniczeń przestrzennych, a wszystkie inne aplikacje są ukryte.


<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

(Tylko aplikacje utworzone za pomocą OpenXR)

Aplikacje utworzone za pomocą OpenXR uruchamiają się w trybie pełnej przestrzeni i muszą korzystać z trybu uruchamianiaXR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Niezarządzana pełna przestrzeń sygnalizuje Androidowi XR, że aplikacja korzysta z 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>

Właściwość android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" wskazuje, że aplikacja powinna zostać uruchomiona z określonym typem granicy. Aplikacja musi określić XR_BOUNDARY_TYPE_LARGE, jeśli jest przeznaczona do tego, aby użytkownicy mogli poruszać się w przestrzeni fizycznej. Określenie XR_BOUNDARY_TYPE_NO_RECOMMENDATION nie zawiera rekomendacji dotyczących typu granicy bezpieczeństwa, więc system używa typu, który jest już używany.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

<uses-native-library> OpenXR

(Tylko aplikacje utworzone za pomocą OpenXR)

Aplikacje OpenXR muszą deklarować użycie natywnej biblioteki OpenXR, aby można było prawidłowo wczytać środowisko wykonawcze. Bez tej deklaracji środowisko wykonawcze nie zostanie wczytane.

<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>

Funkcje PackageManagera w przypadku aplikacji XR

Gdy rozpowszechniasz aplikacje w Sklepie Google Play, możesz określić wymagane funkcje sprzętowe lub programowe w pliku manifestu aplikacji. Element uses-feature umożliwia Sklepowi Play odpowiednie filtrowanie aplikacji wyświetlanych użytkownikom.

Poniższe funkcje są dostępne tylko w aplikacjach z rozszerzoną rzeczywistością.

android.software.xr.api.spatial

Aplikacje utworzone przy użyciu pakietu Jetpack XR SDK muszą zawierać tę funkcję w pliku manifestu aplikacji. Wartość ustawiona dla atrybutu android:required zależy od ścieżki wersji aplikacji.

Jeśli Twoja aplikacja zawiera funkcje lub treści przeznaczone dla XR w istniejącym pliku APK na urządzenia mobilne i jest opublikowana na ścieżce wersji mobilnej, ustaw atrybut android:required na 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" />

Jeśli Twoja aplikacja jest przeznaczona specjalnie na urządzenia obsługujące XR i jest opublikowana na ścieżce wersji Androida XR, ustaw atrybut android:required na 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

Aplikacje kierowane na platformę Android XR i zbudowane za pomocą OpenXR lub Unity muszą zawierać tę funkcję w pliku manifestu aplikacji z atrybutem android:required ustawionym na true.

Aplikacje, które korzystają z pakietu rozszerzeń Android XR dla Unity w wersji 1.0.0 lub nowszej albo z pakietu Unity OpenXR: Android XR w wersji 0.5.0-exp.1 lub nowszej, nie muszą ręcznie dodawać tego elementu do manifestu aplikacji. Te 2 pakiety wstawią ten element do pliku manifestu aplikacji.

Urządzenia mogą określać wersję tej funkcji, która wskazuje najwyższą wersję OpenXR obsługiwaną przez urządzenie. Starsze 16 bitów reprezentuje numer główny, a młodsze 16 bitów – numer podrzędny. Na przykład, aby określić wersję OpenXR 1.1, wartość należy ustawić na "0x00010001".

Aplikacje mogą używać wersji funkcji, aby wskazać minimalną wersję OpenXR, której wymagają. Jeśli na przykład Twoja aplikacja wymaga obsługi OpenXR w wersji 1.1, zadeklaruj tę funkcję:

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

Ta funkcja wskazuje, że aplikacja wymaga do prawidłowego działania danych wejściowych z kontrolera ruchu o wysokiej precyzji i 6 stopniach swobody. Jeśli aplikacja obsługuje kontrolery i nie może bez nich działać, ustaw wartość true. Jeśli aplikacja obsługuje kontrolery, ale może działać bez nich, ustaw ją na 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

Ta flaga oznacza, że aplikacja wymaga śledzenia dłoni z dużą dokładnością, aby działać prawidłowo, w tym określania pozycji, orientacji i prędkości stawów dłoni użytkownika. Jeśli aplikacja obsługuje śledzenie dłoni i nie może działać bez tej funkcji, ustaw wartość true. Jeśli aplikacja obsługuje śledzenie dłoni, ale może działać bez tej funkcji, ustaw ją na 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

Ten tag oznacza, że aplikacja wymaga do prawidłowego działania śledzenia wzroku o wysokiej wierności. Jeśli aplikacja obsługuje śledzenie wzroku jako metodę wprowadzania danych i nie może bez niego działać, ustaw wartość true. Jeśli aplikacja obsługuje śledzenie wzroku jako metodę wprowadzania danych, ale może działać bez tej funkcji, ustaw ją na 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" />

Kwestie związane ze zgodnością pliku manifestu aplikacji na urządzenia mobilne i urządzenia z dużym ekranem

nie będzie się wyświetlać w Sklepie Play na urządzeniach z Androidem XR.

Jak opisano w sekcji Funkcje Menedżera pakietów dla aplikacji XR, aplikacje deklarują, że korzystają z danej funkcji, umieszczając ją w elemencie <uses-feature> w manifeście aplikacji. Niektóre funkcje, takie jak telefonia czy GPS, mogą nie być zgodne ze wszystkimi urządzeniami.

Nieobsługiwane funkcje

Sklep Google Play filtruje aplikacje dostępne do zainstalowania na urządzeniu, korzystając z tych deklaracji funkcji Androida:

Sprzęt aparatu

android.hardware.camera.ar

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.flash

android.hardware.camera.level.full

Łączność

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Konfiguracja urządzenia

android.hardware.ram.low

Konfiguracja formatu

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Urządzenie wejściowe

android.hardware.consumerir

android.software.input_methods

Lokalizacja

android.hardware.location.gps

Near Field Communication

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Konfiguracja zabezpieczeń i sprzęt

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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

Czujniki

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Konfiguracja oprogramowania

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Połączenia telefoniczne

android.hardware.telephony

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.software.sip

android.software.sip.voip

Rzeczywistość wirtualna (starsza wersja)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widżety

android.software.app_widgets

Informacje o uprawnieniach do XR

Podobnie jak w przypadku aplikacji na urządzeniach mobilnych i innych formatach, niektóre funkcje oferowane przez aplikacje XR mogą wymagać zadeklarowania uprawnień w pliku AndroidManifest aplikacji. W przypadku uprawnień niebezpiecznych aplikacja może poprosić o uprawnienia czasu działania. Więcej informacji znajdziesz w artykułach Uprawnienia na AndroidzieSprawdzone metody dotyczące uprawnień.

Aplikacje XR mogą korzystać z tych uprawnień: Wszystkie uprawnienia w tej sekcji są uważane za niebezpieczne, więc musisz zadeklarować je w pliku manifestu aplikacji i poprosić o nie w czasie działania.

android.permission.EYE_TRACKING_COARSE

Reprezentowanie pozycji, stanu i orientacji oczu użytkownika, np. do wykorzystania w przypadku awatarów. Używaj tego uprawnienia, gdy potrzebne są dane śledzenia wzroku o niskiej precyzji.

Jetpack XR SDK

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

android.permission.EYE_TRACKING_FINE

Sterowanie wzrokiem do wybierania, wprowadzania i interakcji.

Jetpack XR SDK

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

android.permission.FACE_TRACKING

śledzenie i renderowanie wyrazów twarzy,

Jetpack XR SDK

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

android.permission.HAND_TRACKING

śledzenie pozycji stawów dłoni oraz prędkości kątowych i liniowych; korzystanie z reprezentacji dłoni użytkownika w postaci siatki.

android.permission.SCENE_UNDERSTANDING_COARSE

szacowanie oświetlenia, rzutowanie obrazu z kamery na powierzchnie siatki, wykonywanie rzutowania promieniowego na śledzone obiekty w środowisku, śledzenie płaszczyzn, śledzenie obiektów, trwałe punkty zakotwiczenia.

android.permission.SCENE_UNDERSTANDING_FINE

Tekstura głębi.

Jetpack XR SDK

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

Weryfikacja jakości aplikacji na Androida XR

Aby sprawdzić, czy Twoja aplikacja zapewnia użytkownikom wygodę, zapoznaj się z naszymi wskazówkami dotyczącymi jakości aplikacji na Androida XR.

Pakowanie i dystrybucja aplikacji na Androida XR

Android XR udostępnia w Google Play wiele różnych aplikacji i funkcji na gogle XR. W przewodniku dotyczącym pakowania i dystrybucji aplikacji na Androida XR znajdziesz informacje o tym, jak zacząć korzystać ze Sklepu Play i Konsoli Play, publikować ścieżki, przygotowywać pakiety Android App Bundle oraz jakie są ograniczenia dotyczące rozmiaru aplikacji.


OpenXR™ i logo OpenXR są znakami towarowymi należącymi do The Khronos Group Inc. i są zarejestrowane jako znaki towarowe w Chinach, Unii Europejskiej, Japonii i Wielkiej Brytanii.