XR için Jetpack Compose

Android XR'nin mekansal özelliklerinden yararlanan mekansal kullanıcı arayüzü düzenleri oluşturma
Son Güncelleme Kararlı Sürüm Sürüm Adayı Beta Sürümü Alfa Sürümü
7 Mayıs 2025 - - - 1.0.0-alpha04

Bağımlılıkları beyan etme

XR Compose'a bağımlılık eklemek için projenize Google Maven deposunu eklemeniz gerekir. Daha fazla bilgi için Google'ın Maven deposunu inceleyin.

Uygulamanızın veya modülünüzün build.gradle dosyasına ihtiyacınız olan yapıların bağımlılıklarını ekleyin:

Eski

dependencies {
    implementation "androidx.xr.compose:compose:1.0.0-alpha04"

    // Use to write unit tests
    testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha04"
}

Kotlin

dependencies {
    implementation("androidx.xr.compose:compose:1.0.0-alpha04")

    // Use to write unit tests
    testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha04")
}

Bağımlılıklar hakkında daha fazla bilgi için Derleme bağımlılıkları ekleme başlıklı makaleyi inceleyin.

Geri bildirim

Geri bildiriminiz Jetpack'in iyileştirilmesine yardımcı olur. Yeni sorunlar keşfederseniz veya bu kitaplığı iyileştirmek için fikirleriniz varsa lütfen bize bildirin. Yeni bir kitaplık oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oy verebilirsiniz.

Yeni bir sorun oluşturma

Daha fazla bilgi için Sorun İzleyici belgelerine bakın.

Sürüm 1.0

Sürüm 1.0.0-alpha04

7 Mayıs 2025

androidx.xr.compose:compose:1.0.0-alpha04 ve androidx.xr.compose:compose-testing:1.0.0-alpha04 yayınlandı. 1.0.0-alpha04 sürümü bu taahhütleri içerir.

Yeni Özellikler

  • Özel SubspaceModifier türlerinin kompozisyon yerel değerlerine erişmesine izin vermek için CompositionLocalConsumerSubspaceModifierNode arayüzü eklendi.
  • Oluşturma AndroidView uygulama stilini izleyen ve önceki ViewBased SpatialPanel için desteği sonlandıran yeni bir SpatialPanel API eklendi.
  • Sınırsız kısıtlamaları temsil eden VolumeConstraints.Unbounded tamamlayıcı nesnesi eklendi.
  • Uzamsal ses kaynağına izin vermek için SubspaceModifier.onPointSourceParams eklendi.
  • Uygulamanın mekansal içerik oluşturabileceği 3D bir alanı tanımlamak için isteğe bağlı VolumeConstraints sunan herkese açık bir ApplicationSubspace eklendi. Varsayılan olarak, herhangi bir kısıtlama belirtilmezse alt alan, SpatialUser'nin mevcut genişlik ve yükseklikteki görüş alanıyla sınırlandırılır. Kullanıcılar, görüş alanı belirlenemezse kullanılacak kısıtlamaları sağlayabilir. Aksi takdirde, varsayılan görüntü alanı genişliği ve yüksekliği değerleri kullanılır.
  • Stereoskopik içerik oluşturmak için kullanılabilen SpatialExternalSurface eklendi. SpatialExternalSurface, değiştiricilerle (alfa hariç) ve kenar yumuşatma efektiyle özelleştirilebilir.
  • Kullanıcıların uzamsal işaretçinin simgesini ayarlamalarına olanak tanıyan yeni bir pointerHoverIcon alt alan değiştirici eklendi.

API Değişiklikleri

  • Tüm Jetpack XR paketlerinde RequiresApi(34) kısıtlaması kaldırıldı. Jetpack XR şu anda yalnızca API düzeyi 34 ve sonraki sürümleri çalıştıran cihazlarda kullanılabildiğinden bu kısıtlama gereksiz hale gelmişti. (Iae0f8)
  • Kotlin 2.0 ile yayınlanan projelerin kullanılabilmesi için KGP 2.0.0 veya daha yeni bir sürüm gerekir. (Idb6b5)
  • Geri işleme artık yerleşik etkinlikler içermeyen mekansal panellerde çalışacak. Geri işleme özelliğinin çalışması için Android manifest dosyasında android:enableOnBackInvokedCallback="true" belirtmeniz gerekir.
  • Geri işleme özelliği artık mekansal iletişim kutularında da çalışacak. Geri işleme özelliğinin çalışması için Android manifest dosyasında android:enableOnBackInvokedCallback="true" belirtmeniz gerekir.
  • Oluşturma tabanlı ve görüntüleme tabanlı SpatialPanel'ler artık içeriklerine göre boyutlandırılabilir.
  • Geliştiriciler artık kendi özel SpatialElevationLevel değerlerini belirleyebilir ve önceden tanımlanmış seviyelerle sınırlı değildir.
  • Yörünge aracının yükseklik düzeyi artık elevation parametresi aracılığıyla özelleştirilebilir.
  • Alt alan artık varsayılan olarak SpatialUser'nin genişlik ve yükseklikteki görüş alanıyla sınırlandırılabilir. Görüş alanı belirlenemezse varsayılan görüş alanı genişliği ve yüksekliği değerleri kullanılır.
  • Movable değiştiricisine yeni geri çağırma işlevleri onMoveStart ve onMoveEnd eklendi. onMoveStart ve onMoveEnd geri çağırma işlevleri, kullanıcı hareketli değiştiriciyle birleştirilebilir bir alt uzayı hareket ettirmeye başladığında ve hareket ettirmeyi bıraktığında çağrılır.
  • name parametresi, SpatialRow ve SpatialPanel gibi uzamsal API'lerden kaldırıldı. Mekansal oluşturma ağaçları için bunun yerine SubspaceModifier.testTag kullanın.
  • Yalnızca spatialElevationLevel ve content içeren, desteklenmeyen bir SpatialPopup aşırı yüklemesi kaldırıldı. Lütfen onDimissRequest'ü destekleyen arayüzü kullanın.
  • Movable değiştiriciden gelen onPoseChange geri çağırma işlevi kaldırıldı. Bunun yerine onMove'ü kullanın.
  • SubspaceModifiers, ayrılmışsa veya ayrılıyorsa artık efektlerini uygulamaz.
  • Mevcut SpatialRow API, SpatialRow ve SpatialCurvedRow olarak ikiye ayrıldı. Daha önce SpatialRow'ın curveRadius parametresini kullanıyorsanız bunun yerine aynı davranışı sunan SpatialCurvedRow parametresini kullanın.
  • MainPanel ve ActivityPanel, benzer şekilde yeni bir sistem görüntüsünde çalıştırıldığında artık başlık çubuğuna sahip değildir.
  • Alfa ve ölçek değiştiriciler artık yığınlanabilir ve uygulanan son alfa veya ölçek değeri için değerlerini çarpar.
  • Movable değiştiriciden gelen onPoseChange geri çağırma işlevi, daha yumuşak poz hareketi gerçekleştirmek için optimize edildi.
  • Taşınabilir ve yeniden boyutlandırılabilir değiştiriciler artık durum değişikliklerinin yeniden oluşturmayı tetiklemesini sağlamak için geri çağırma işlevlerini ana iş parçacığında gerçekleştirecek.
  • SubspaceLayout'teki durum değişikliklerinin yeniden düzeni tetiklemesini sağlamak için düzen ve ölçüm aşamalarına durum gözlemi eklendi.
  • Mevcut değiştiricileri daha iyi yeniden kullanmak için optimize edilmiş değiştirici zinciri güncellemeleri.

Hata Düzeltmeleri

  • SpatialDialog gösterildiğinde ekran karartıldı. (Ic4594)
  • Değiştirici düğümler ayrılmışken yapılan yeniden düzenleme istekleri artık yoksayılacak.
  • Taşınabilir ve Değiştirilebilir değiştiriciler tarafından tetiklenen yeniden düzen aşamaları kaldırıldı.
  • MainPanel() bileşeninde, boyut doğrudan veya bir düzen hesaplaması (ör. SpatialRow/SpatialColumn hesaplaması) sırasında sıfır olarak ayarlandığında meydana gelen kilitlenme düzeltildi. Panel artık gizlenir. Bu düzeltmenin özellikle düzen aşamasındaki kilitlenmeleri ele aldığını unutmayın. Panelin kullanıcı etkileşimi aracılığıyla sıfıra yeniden boyutlandırılması ayrı olarak ele alınacaktır. Gizli panelde kullanıcı arayüzü kolaylıkları yok.
  • Boyutlandırılabilir değiştiricideki maintainAspectRatio ile ilgili sorun düzeltildi. En boy oranı artık korunacaktır.
  • İç içe yerleştirilmiş alt alanların tek bir kare için yanlış konumlandırılmasına neden olan sorun düzeltildi.
  • Yuvarlatılmış köşelerin bazen uygulanması gerektiği halde uygulanmaması sorunu düzeltildi.
  • NestedSubspaces artık bir kare için yanlış konumda görünmeyecek.

Sürüm 1.0.0-alpha03

26 Şubat 2025

androidx.xr.compose:compose:1.0.0-alpha03 ve androidx.xr.compose:compose-testing:1.0.0-alpha03, son alfa sürümden bu yana önemli bir değişiklik içermeden yayınlandı. 1.0.0-alpha03 sürümü bu taahhütleri içerir

Sürüm 1.0.0-alpha02

12 Şubat 2025

androidx.xr.compose:compose:1.0.0-alpha02 ve androidx.xr.compose:compose-testing:1.0.0-alpha02 yayınlandı. 1.0.0-alpha02 sürümü bu taahhütleri içerir.

Yeni Özellikler

  • Etkinlik paneli artık bir uzamsal iletişim etkinleştirildiğinde içeriğini karartabilir.
  • Orbiter API artık SubspaceComposable bağlamlarında kullanılabilir ve Orbiter'ları en yakın SubspaceLayout tabanlı birleştirilebilir üst öğelerine ekler.
  • Özel konumlandırmaya dayalı değiştiricilere izin vermek için LayoutCoordinatesAwareModifierNode kullanıma sunuldu.
  • SubspaceModifier.Node için ekleme/çıkarma yaşam döngüsü yöntemleri eklendi.
  • Hareketli değiştiriciye scaleWithDistance eklendi. scaleWithDistance etkinleştirildiğinde, taşınan alt alan öğesi büyür veya küçülür. Ayrıca, hareket etmeden önceki açık ölçeği de korur.

API Değişiklikleri

  • SessionCallbackProvider, SpatialCapabilities için kaldırıldı.

Diğer değişiklikler

  • minSDK 24'e düşürüldü. Tüm Jetpack XR API'leri, çalışma zamanında API 34'ü kullanmaya devam eder.
  • Orbiter EdgeOffset.inner, EdgeOffset.outer ve EdgeOffset.overlap kurucuları artık @Composable yöntemleri değildir. Bu sayede, birleştirilebilir olmayan bağlamlarda kullanılabilirler.
  • Uzamsal yükseklik seviyelerini en son kullanıcı deneyimi spesifikasyonuyla eşleşecek şekilde güncelleyin.
  • SubspaceSemanticsInfo arayüzünü MeasurableLayout'a uygulayın.
  • SubspaceModifierElement, SubspaceModifierNodeElement olarak yeniden adlandırıldı.

Hata düzeltmeleri

  • SubspaceModifier sıralamasını sabitlemek için düzeltmeler. SubspaceModifier daha güvenilir şekilde davranacaktır. Ofset, döndürme, ölçek, taşınabilir ve yeniden boyutlandırılabilir değiştirici artık herhangi bir sırada kullanılabilir.

Sürüm 1.0.0-alpha01

12 Aralık 2024

androidx.xr.compose:compose-*1.0.0-alpha01 yayınlanır.

İlk Sürümün Özellikleri

  • XR için Jetpack Compose'un ilk geliştirici sürümü. Mevcut bir 2D uygulamayı XR'ye taşıyor veya sıfırdan yeni bir XR uygulaması oluşturuyor olsanız da XR'de uzamsal kullanıcı arayüzü düzenleri oluşturmak için satırlar ve sütunlar gibi tanıdık Compose kavramlarını kullanın. Bu kitaplık, mevcut 2D Compose veya Görünüm tabanlı kullanıcı arayüzünüzü bir mekansal düzene yerleştirmenize olanak tanıyan mekansal paneller ve yörünge araçları gibi alt alan ve mekansal bileşenler sağlar. Bu sürümde, 3D modeller gibi SceneCore öğelerini kullanıcı arayüzünüze göre yerleştirmenize olanak tanıyan Hacim alt uzayı birleştirilebilir öğesi kullanıma sunulmuştur. Daha fazla bilgi için bu geliştirici kılavuzunu inceleyin:

    • Subspace: Bu bileşen, uygulamanızın kullanıcı arayüzü hiyerarşisinin herhangi bir yerine yerleştirilebilir. Böylece, dosyalar arasındaki bağlamı kaybetmeden 2D ve uzamsal kullanıcı arayüzü için düzenleri koruyabilirsiniz. Bu sayede, kullanıcı arayüzü ağacınızın tamamında durumu kaldırmanıza veya uygulamanızın mimarisini yeniden tasarlamanıza gerek kalmadan mevcut uygulama mimarisi gibi öğeleri XR ile diğer form faktörleri arasında paylaşabilirsiniz.

    • SpatialPanel: Mekansal panel, uygulama içeriğini görüntülemenize olanak tanıyan bir alt alan bileşimidir. Örneğin, bir mekansal panelde video oynatma, hareketsiz resimler veya başka herhangi bir içerik görüntüleyebilirsiniz.

    • Yörünge aracı: Yörünge aracı, mekansal bir kullanıcı arayüzü bileşenidir. İlgili bir mekansal panele eklenecek şekilde tasarlanmıştır ve bu mekansal panelle ilgili gezinme ve bağlamsal işlem öğeleri içerir. Örneğin, video içeriği görüntülemek için bir uzamsal panel oluşturduysanız bir yörünge aracının içine video oynatma kontrolleri ekleyebilirsiniz.

    • Hacim: 3D modeller gibi SceneCore öğelerini kullanıcı arayüzünüze göre yerleştirin.

  • Üç boyutlu yerleşim: SpatialRow, SpatialColumn, SpatialBox ve SpatialLayoutSpacer simgesini kullanarak birden fazla üç boyutlu panel oluşturabilir ve bunları üç boyutlu yerleşime yerleştirebilirsiniz. Düzeninizi özelleştirmek için SubspaceModifier simgesini kullanın.

  • Mekansal kullanıcı arayüzü bileşenleri: Bu öğeler 2D kullanıcı arayüzünüzde yeniden kullanılabilir ve mekansal özellikleri yalnızca mekansal özellikler etkinleştirildiğinde görünür.

    • SpatialDialog: Panel, yükseltilmiş bir iletişim kutusu görüntülemek için z-derinliğinde biraz geriye itilir.
    • SpatialPopUp: Panel, yükseltilmiş bir pop-up görüntülemek için z-derinliğinde biraz geriye itilir
    • SpatialElevation: SpatialElevationLevel, yükseklik eklemek için ayarlanabilir.
  • SpatialCapabilities: SpatialCapabilities, kullanıcılar uygulamanızla veya sistemle etkileşim kurarken değişebilir. Hatta uygulamanız tarafından da değiştirilebilir (ör. ana alana veya tam alana geçme). Sorun yaşanmaması için uygulamanızın, mevcut ortamda hangi API'lerin desteklendiğini belirlemek üzere LocalSpatialCapabilities.current değerini kontrol etmesi gerekir. isSpatialUiEnabled: Üç boyutlu kullanıcı arayüzü öğeleri (ör. SpatialPanel) isContent3dEnabled: 3D nesneler isAppEnvironmentEnabled: Ortam isPassthroughControlEnabled: Uygulamanın geçiş durumunu kontrol edip edemeyeceği isSpatialAudioEnabled: Üç boyutlu ses

Bilinen Sorunlar

  • Şu anda XR için Jetpack Compose'u kullanmak üzere 30'un üzerinde bir minSDK gereklidir. Geçici bir çözüm olarak, 23 minimum SDK ile derleyip çalıştırabilmek için aşağıdaki manifest girişini <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> ekleyebilirsiniz.
  • Jetpack XR uygulamaları için şu anda AndroidManifest'de android.permission.SCENE_UNDERSTANDING izninin istenmesi gerekiyor.
  • Bir uygulama, manifest dosyasında PROPERTY_XR_ACTIVITY_START_MODE mülkünü kullanarak doğrudan Tam Alan'da başlatıldığında Etkinlikler/Uygulamalar, Tam Alan'a geçmeden önce başlangıçta Ana Alan'da açılır.
  • Hacim bileşenlerindeki glTF'ler başlangıçta yanlış konumda yanıp sönebilir.
  • Önemli ölçüde hareket ettirilmiş bir panelde SpatialDialog kullanılması, içeriğin yanlış yöne gitmesine neden olur.