Omówienie kompilowania aplikacji na Androida XR

Android XR to rozszerzenie platformy i ekosystemu Androida. Pakiet SDK Androida XR umożliwia tworzenie aplikacji XR za pomocą znanych platform i narzędzi Androida lub standardów open source, takich jak OpenXR i WebXR. Wszystkie zgodne aplikacje na urządzenia mobilne lub duże ekrany będą dostępne do zainstalowania na zestawach XR ze Sklepu Play. Zapoznaj się z uwagami na temat zgodności, aby sprawdzić, czy Twoja aplikacja jest zgodna.

W tym przewodniku omawiamy te kwestie:

  • Wybieranie narzędzi i technologii programistycznych
  • Projektowanie aplikacji na Androida XR
  • Konfigurowanie pliku manifestu aplikacji
  • Informacje o zgodności pliku manifestu aplikacji
  • Informacje o uprawnieniach w Androidzie XR
  • Dbanie o jakość aplikacji na Androida XR
  • Pakowanie i rozpowszechnianie aplikacji na Androida XR

Wybierz narzędzia i technologie programistyczne

Podczas tworzenia aplikacji na Androida XR możesz skorzystać z tych platform i technologii programistycznych:

Pakiet SDK Jetpack XR

Pakiet Jetpack XR SDK zawiera biblioteki Jetpacka na Androida XR, które umożliwiają korzystanie z unikatowych 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ą Android Studio i Jetpacka

Jeśli czujesz się już pewnie, tworząc aplikacje za pomocą Jetpacka na Androida, Jetpack XR SDK będzie dla Ciebie odpowiednim wyborem. Został on zaprojektowany tak, aby płynnie integrować się z tymi frameworkami i bibliotekami oraz umożliwiać korzystanie z dotychczasowej wiedzy do tworzenia wciągających doświadczeń XR.

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

Unity

Unity Engine to platforma do tworzenia gier 3D w czasie rzeczywistym, która umożliwia współpracę między artystami, projektantami i programistami w celu tworzenia wciągających i interakcyjnych treści. Obsługa Androida XR w Unity zapewnia wysoki poziom kontroli nad tworzonymi przez Ciebie wrażeniami 3D, a zarazem korzystanie z dobrze rozwiniętego wsparcia OpenXR i ekosystemu deweloperów Unity.

Jeśli masz już treści XR utworzone w Unity lub znasz się na programowaniu w Unity, zacznij od tej opcji.

Więcej informacji o programowaniu w Unity na Androida XR

OpenXR

OpenXR to otwarty standard bez tantiem, który można wykorzystać do tworzenia wydajnych, wieloplatformowych środowisk XR. Android XR obsługuje specyfikacje OpenXR 1.0 i 1.1. Rozszerzamy tę specyfikację o nowe rozszerzenia na potrzeby Androida XR. Platforma Android XR jest oparta na otwartych standardach, dlatego narzędzia do tworzenia aplikacji, które obsługują OpenXR i Androida, powinny być zgodne z Androidem XR.

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

WebXR

WebXR umożliwia tworzenie wciągających wrażeń w internecie. Zapewnia 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 tworzyć treści XR na potrzeby internetu lub dodawać funkcje XR do aplikacji internetowej. Dotychczasowe treści WebXR będą też działać na Androidzie XR.

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

Projektowanie z myślą o XR

Rzeczywistość rozszerzona rozszerza możliwości projektowania poza tradycyjne płaskie ekrany. Możesz tworzyć immersyjne doświadczenia, które łączą rzeczywistość fizyczną z wirtualną. Niezależnie od tego, czy tworzysz zupełnie nowe środowisko, czy dodajesz elementy skoncentrowane na użytkowniku do istniejącej aplikacji, ten przewodnik po projektowaniu aplikacji 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 zawierać plik AndroidManifest.xml z określonymi ustawieniami. Plik manifestu zawiera najważniejsze informacje o aplikacji, które są potrzebne narzędziom do kompilacji Androida, systemowi operacyjnemu Android i Google Play. Więcej informacji znajdziesz w przewodniku na temat pliku manifestu aplikacji.

W przypadku aplikacji z różnicowaniem na potrzeby XR plik manifestu musi zawierać te elementy i atrybuty:

Właściwość PROPERTY_ACTIVITY_XR_START_MODE

Właściwość android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE" informuje system, że aktywność powinna być uruchamiana w określonym trybie po jej rozpoczęciu.

Właściwość ta może mieć 3 możliwe wartości:

  • XR_ACTIVITY_START_MODE_HOME_SPACE (tylko pakiet SDK Jetpack XR)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (tylko pakiet SDK Jetpack XR)
  • 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 obszarze Home Space. W obszarze Home Space można uruchamiać wiele aplikacji obok siebie, co pozwala użytkownikom na wykonywanie wielu zadań jednocześnie. W domu można używać dowolnej aplikacji na Androida na telefony i duże ekrany, a także aplikacji XR utworzonych 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)

Ten tryb uruchamiania pozwala uruchomić aplikację w trybie Full Space. W trybie pełnego obrazu działa tylko jedna aplikacja, bez żadnych ograniczeń, a pozostałe 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

(dotyczy tylko aplikacji utworzonych za pomocą OpenXR)

Aplikacje utworzone za pomocą OpenXR uruchamiają się w trybie pełnej przestrzeni i muszą używać trybu uruchamianiaXR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Niezarządzany pełny ekran sygnalizuje Androidowi XR, że aplikacja używa 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>

<uses-native-library> OpenXR

(dotyczy tylko aplikacji utworzonych za pomocą OpenXR)

Aplikacje OpenXR muszą zadeklarować korzystanie z natywnej biblioteki OpenXR, aby móc wczytać środowisko uruchomieniowe. Bez tej deklaracji środowisko uruchomieniowe nie wczyta się.


<manifest ... >

    <application ... >

    <uses-native-library android:name="libopenxr.google.so" android:required="true" />

       <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 dla aplikacji XR

Podczas rozpowszechniania aplikacji w Sklepie Google Play możesz określić wymagane funkcje sprzętowe lub programowe w manifeście aplikacji. Element uses-feature pozwala Sklepowi Play odpowiednio filtrować aplikacje wyświetlane użytkownikom.

Poniższe funkcje są dostępne tylko w przypadku aplikacji z usługami XR.

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 wydania aplikacji.

Jeśli Twoja aplikacja zawiera funkcje lub treści rzeczywistości powiększonej w dotychczasowym pliku APK na urządzenia mobilne i jest opublikowana na ścieżce wersji mobilnej, musisz ustawić atrybut android:required na false. Jeśli aplikacja została przygotowana specjalnie na urządzenia z XR i opublikowana na ścieżce wersji na Androida XR, należy ustawić atrybut android:required na true.

<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />

android.software.xr.api.openxr

Aplikacje kierowane na platformę Android XR, które zostały utworzone za pomocą OpenXR lub Unity, muszą uwzględniać tę funkcję w pliku manifestu aplikacji z atrybutem android:required ustawionym na true.

Aplikacje, które korzystają z pakietu rozszerzeń Androida XR dla Unity w wersji 1.0.0 lub nowszej albo z Unity OpenXR: pakietu Androida XR w wersji 0.5.0-exp.1 lub nowszej, nie muszą dodawać tego elementu ręcznie do pliku manifestu aplikacji. Te 2 pakiety wstrzykną 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. 16 bitów z góry reprezentuje liczbę główną, a 16 bitów z dołu – liczbę podrzędną. Na przykład aby określić wersję OpenXR 1.1, należy ustawić wartość „0x00010001”.

Aplikacje mogą używać wersji funkcji, aby wskazać minimalną wersję OpenXR wymaganą przez aplikację. 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 do prawidłowego działania wymaga sterowania za pomocą precyzyjnego kontrolera ruchu 6DoF (stopni swobody). Jeśli Twoja aplikacja obsługuje kontrolery i nie może działać bez nich, ustaw wartość na „true” (prawda). Jeśli aplikacja obsługuje kontrolery, ale może działać bez nich, ustaw tę wartość na „fałsz”.

<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />

android.hardware.xr.input.hand_tracking

Ta flaga wskazuje, że aplikacja wymaga do prawidłowego działania śledzenia dłoni o wysokiej wierności, w tym pozycji, orientacji i prędkości stawów w ręce użytkownika. Jeśli Twoja aplikacja obsługuje śledzenie dłoni i nie może działać bez niego, ustaw wartość na „true”. Jeśli Twoja aplikacja obsługuje śledzenie dłoni, ale może działać bez niego, ustaw tę opcję na „false” (fałsz).

<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />

android.hardware.xr.input.eye_tracking

Ten parametr wskazuje, że aplikacja wymaga do prawidłowego działania śledzenia ruchów oczu o wysokiej precyzji. Jeśli Twoja aplikacja obsługuje śledzenie ruchów gałek ocznych i nie może działać bez niego, ustaw wartość na „Prawda”. Jeśli Twoja aplikacja obsługuje śledzenie wzroku, ale może działać bez niego, ustaw tę opcję na „false” (fałsz).

<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

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

Jak opisano w sekcji Funkcje PackageManagera dla aplikacji XR, aplikacje deklarują, że korzystają z funkcji, deklarując ją w elementach <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 do kamer

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

Podobnie jak w przypadku aplikacji na urządzenia mobilne i inne formaty, niektóre funkcje oferowane przez aplikacje XR mogą wymagać deklaracji uprawnień w pliku AndroidManifest aplikacji. W przypadku niebezpiecznych uprawnień aplikacja może poprosić o uprawnienia czasu działania. Aby dowiedzieć się więcej, przeczytaj artykuły Uprawnienia na AndroidzieSprawdzone metody dotyczące uprawnień.

Aplikacje XR mogą używać tych uprawnień. Wszystkie uprawnienia opisane w tej sekcji są uważane za niebezpieczne, dlatego musisz je zadeklarować w pliku manifestu aplikacji iwymagać ich w czasie działania.

android.permission.EYE_TRACKING_COARSE

Reprezentowanie pozycji, stanu i orientacji oczu użytkownika, np. do użytku z awatarami. Używaj tego uprawnienia, gdy potrzebne są dane śledzenia oczu o niskiej precyzji.

Pakiet SDK Jetpack XR

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

android.permission.EYE_TRACKING_FINE

śledzenie wzroku do zaznaczania, wprowadzania i interakcji;

Pakiet SDK Jetpack XR

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

android.permission.FACE_TRACKING

śledzenie i renderowanie wyrazów twarzy,

Pakiet SDK Jetpack XR

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 siatki dłoni użytkownika.

android.permission.SCENE_UNDERSTANDING_COARSE

oszacowanie światła; rzutowanie przezroczystości na powierzchnie siatki; wykonywanie rzutów promieniowych na elementy śledzenia w środowisku; śledzenie płaszczyzny; śledzenie obiektów; stałe punkty odniesienia.

android.permission.SCENE_UNDERSTANDING_FINE

Tekstura głębi.

Pakiet SDK Jetpack XR

nie dotyczy

Rozszerzenia OpenXR

Funkcje Unity

Zadbaj o jakość aplikacji na Androida XR

Aby mieć pewność, że aplikacja zapewnia użytkownikom świetne wrażenia, zapoznaj się z wytycznymi dotyczącymi jakości aplikacji na Androida XR.

Pakowanie i rozpowszechnianie aplikacji na Androida XR

Android XR zapewnia dostęp do wielu aplikacji i doświadczeń w goglach XR za pomocą Google Play. W przewodniku dotyczącym pakowania i rozpowszechniania aplikacji na Androida XR znajdziesz informacje o tym, jak zacząć korzystać ze Sklepu Play i Konsoli Play, publikować ścieżki, przygotowywać pakiety aplikacji na Androida oraz ograniczać rozmiar aplikacji.