XR için Jetpack Compose

Android XR'ın üç boyutlu özelliklerinden yararlanan üç boyutlu kullanıcı arayüzü düzenlerini bildirimsel olarak oluşturun.
Son Güncelleme Kararlı sürüm Sürüm Adayı Beta Sürümü Alfa sürümü
30 Temmuz 2025 - - - 1.0.0-alpha05

Bağımlılıkları bildirme

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

Uygulamanız veya modülünüz için build.gradle dosyasına ihtiyacınız olan yapılarla ilgili bağımlılıkları ekleyin:

Eski

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

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

Kotlin

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

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

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ştirmeye yönelik fikirleriniz olursa lütfen bize bildirin. Yeni bir sorun oluşturmadan önce lütfen bu kitaplıktaki mevcut sorunlara göz atın. Yıldız düğmesini tıklayarak mevcut bir soruna oyunuzu ekleyebilirsiniz.

Yeni sorun oluşturma

Daha fazla bilgi için Sorun İzleyici belgelerini inceleyin.

Sürüm 1.0

Sürüm 1.0.0-alpha05

30 Temmuz 2025

androidx.xr.compose:compose:1.0.0-alpha05 ve androidx.xr.compose:compose-testing:1.0.0-alpha05 yayınlandı. 1.0.0-alpha05 sürümü bu commit'leri içerir.

Yeni Özellikler

  • SubspaceComposable ek açıklama sınıfını herkese açık hale getirdi. (Ic2a34, b/399432430)
  • 180 ve 360 derecelik küreleri temsil eden iki yeni SpatialExternalSurface Composables. (I40ef2, b/391705799)
  • SubspaceModifier.aspectRatio eklendi (Ide5ab, b/399729509, b/414762147)
  • SceneCoreEntity API'si, SceneCore ile Compose for XR arasındaki birlikte çalışabilirliği artırmak için eklendi. (I50bb3, b/423020989)
  • Ölçeklendirilmemiş VE GravityAligned özelliğini desteklemek için GravityAlignedsubspace API sağlandı (I07359).

API Değişiklikleri

  • SpatialDialog(), SpatialDialogProperties.dismissOnBack tuşuna basma yapılandırmasını izler. (Ib453b, b/416797132)
  • minimumPanelDimension, Metre cinsinden gösterildiği için Dimensions(0.1f, 0.1f, 0.1f) yeni varsayılan boyutuna güncellendi. (Ib852a)
  • Alt alanlar ve uydular artık ev alanında ve uygulama arka plandayken kendi iç durumlarını koruyacak. Ev alanı modunda Subspace, tam alan moduna geçişe hazırlanmak için sahnesini kurmaya devam eder. (I40317, b/416037751)
  • SpatialDialogs artık uygulama arka plandayken durumlarını koruyacak. (I6aa56)
  • ApplicationSubspace artık önerilen ölçeğini ve konumunu sistemden devralacak. (I4565f, b/418834194)
  • SubspaceComposable bağlamı dışında bir SubspaceComposable kullanıldığında daha iyi bir hata mesajı eklendi ve hata daha erken tetikleniyor. (Iee2ae, b/416484684)
  • Composable API'ler yanlış kullanıldığında uyarılar genellikle gözden kaçırıldığından ExperimentalSubspaceVolumeApi uyarısını hata olarak güncelledik. (I427aa, b/424864286)
  • Alt alan ve ApplicationSubspace artık recommendedContentBoxInFullSpace ile sınırlanıyor. Daha önce SpatialUser'nın görüş alanı ile sınırlıydı. (I41015, b/423074142)
  • SpatialElevation öğesini, sabit kodlanmış boyut kullanmayı bırakmak için minimum boyutu kullanacak şekilde güncelleyin (I2dbe6, b/427785338)
  • Önemli bir değişken değiştirildiğinde güncellenmesi için SpatialAcitivityPanel ile ilgili hazırlık maçlarımızı nasıl yaptığımızı güncelleyin. (I0f64d, b/427999029)
  • Varsayılan kısıtlama değerlerini eşdeğer olarak ayarlamak için VolumeConstraints.Unbounded öğesini kaldırın. (Ie24ec, b/407938414)
  • SpatialFeatheringSize artık herkese açık değil (I1c15b, b/399432430)
  • Compose'un Placeable özelliğinden ayırt etmek için XR Placeable özelliğini SubspacePlaceable olarak yeniden adlandırdı. (I74874)
  • Orbiter ayarlarını kaldırma ve shouldRenderInNonSpatial öğesini yeni bir parametre olarak ekleme. Ayrıca, EdgeOffset sınıfını kaldırıp orbiterOffsetType sınıfını yeni bir parametre olarak ekleyerek Orbiter() işlevlerini birleştirin. Ayrıca OrbiterEdge alanını ContentEdge olarak yeniden adlandırın. (Iebf3d)
  • Türün, Compose'un Measurable türünden farklı olduğunu belirtmek için Measurable, SubspaceMeasurable olarak yeniden adlandırıldı. (I9726c)
  • MeasureResult dosyasını SubspaceMeasureResult olarak yeniden adlandırın (I9f34d)
  • setSubspaceContent API'si kaldırıldı. Bunun yerine Subspace composable ile Compose'un setContent kullanılması önerilir. (Ifff4c, b/421427391, b/421427391)
  • MeasurePolicy, SubspaceMeasurePolicy olarak yeniden adlandırıldı. (I37a9b, b/422553904)
  • Varsayılanlar olmadan üye ekleyemeyeceğimiz için SubspaceSemanticsInfo'ı kapalı bir arayüze dönüştürün. (I372f9, b/423704068)
  • SpatialExternalSurface dokümanları güncellendi, ContentSecurityLevel, SurfaceProtection olarak yeniden adlandırıldı (I3c460, b/420982808)
  • Taşınabilir değiştirici için, sabitlemeye olanak tanıyan aşırı yüklenmiş oluşturucu sağlandı. (Ic0c70)
  • İpuçları için daha fazla konum sağlayıcı eklendi. Böylece geliştiriciler, ipucunun sabitleme noktasının üstünde, altında, solunda veya sağında yerleştirilip yerleştirilmeyeceğini kontrol edebilir. Şapka işaretleri için bir Şekil alan bir API ekleyin. Böylece daha fazla özel şekil sağlanabilir. (Ie513c, b/374766087, b/418854637)
  • CoreEntity, PublishedApi olarak kaldırıldı (Ifee05)

Hata Düzeltmeleri

  • SpatialDialog simgesinin oluşturulurken yanıp sönmesi sorunu düzeltildi. (Ife73c, b/401619909)
  • Etkinlik panelinin SpatialDialog ile karartılamaması sorunu düzeltildi. (I8ca6c, b/367442109)
  • XR iletişim kutusunun bazı içerikleri göstermemesi sorunu düzeltildi (I17cd5, b/418062437).
  • İçerik içinde tıklandığında SpatialPopup öğesinin kapatılması sorunu düzeltildi. (If262c, b/417245722)
  • resizable().movable() ile zincirleme yapıldığında SpatialPanel'in yeni boyuta doğru şekilde yeniden boyutlandırılamaması sorunu düzeltildi. (I02ee3, b/422264230)
  • SpatialComposeVideoPlayer'deki menüyle topBar'nin çakışması sorunu düzeltildi (Id33bc, b/427168167).
  • Sabit köşe yarıçapının oluşturulmaması sorunu düzeltildi (I975fe, b/428261830).

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 commit'leri içerir.

Yeni Özellikler

  • Özel SubspaceModifier türlerinin kompozisyon yerel değerlerine erişmesine olanak tanıyan CompositionLocalConsumerSubspaceModifierNode arayüzü eklendi.
  • SpatialPanel uygulama stilini izleyen ve önceki AndroidView işlevini kullanımdan kaldıran yeni bir ViewBased SpatialPanel API'si eklendi.
  • Sınırsız kısıtlamaları temsil eden VolumeConstraints.Unbounded yardımcı nesnesi eklendi.
  • Uzamsallaştırılmış ses kaynağına izin vermek için SubspaceModifier.onPointSourceParams eklendi.
  • Uygulamanın, mekansal içerik oluşturabileceği 3D 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 uzay, SpatialUser'nın genişlik ve yükseklikteki mevcut görüş alanıyla sınırlanır. Kullanıcılar, görüş alanı belirlenemezse kullanılacak kısıtlamalar sağlayabilir. Aksi takdirde, varsayılan görüş alanı genişliği ve yüksekliği değerleri kullanılır.
  • Stereoskopik içerik oluşturmak için kullanılabilecek SpatialExternalSurface eklendi. SpatialExternalSurface, değiştiricilerle (alfa hariç) ve kenar yumuşatma efektiyle özelleştirilebilir.
  • Kullanıcıların uzamsal işaretçinin simgesini ayarlamasına olanak tanıyan yeni bir pointerHoverIcon Alt Alan Değiştirici eklendi.

API Değişiklikleri

  • Tüm Jetpack XR paketlerindeki RequiresApi(34) kısıtlaması kaldırıldı. Jetpack XR şu anda yalnızca API düzeyi 34 ve üzeri olan cihazlarda kullanılabildiğinden bu kısıtlama gereksizdi. (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)
  • Geriye doğru işleme artık yerleştirilmiş etkinlikler içermeyen uzamsal panellerde çalışacak. Geriye doğru işleme özelliğinin çalışması için android manifest dosyasında android:enableOnBackInvokedCallback="true" belirtmeniz gerekir.
  • Geriye doğru işleme artık uzamsal iletişim kutularında çalışacak. Geriye doğru işleme özelliğinin çalışması için Android manifestinde android:enableOnBackInvokedCallback="true" belirtmeniz gerekir.
  • Oluşturma tabanlı ve görüntüleme tabanlı SpatialPanel artık içeriklerine göre boyutlandırılabilir.
  • Geliştiriciler artık kendi özel SpatialElevationLevel değerlerini ayarlayabilir ve önceden tanımlanmış seviyelerle sınırlı değildir.
  • Orbiter yükseklik düzeyi artık elevation parametresiyle özelleştirilebilir.
  • Alt alan artık varsayılan olarak SpatialUser'nın genişlik ve yükseklik açısından görüş alanıyla sınırlanabilir. Görüş alanı belirlenemezse varsayılan görüş alanı genişliği ve yüksekliği değerleri kullanılır.
  • onMoveStart ve onMoveEnd adlı yeni geri çağırma işlevleri, Movable değiştiricisine eklendi. onMoveStart ve onMoveEnd geri çağırmaları, kullanıcı hareketli değiştiriciyle birleştirilebilen bir alt alanı hareket ettirmeye başladığında ve hareket ettirmeyi bitirdiğinde çağrılır.
  • name parametresi, SpatialRow ve SpatialPanel gibi coğrafi API'lerden kaldırıldı. Uzamsal oluşturma ağaçlarında hata ayıklamak 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 simgesini destekleyen arayüzü kullanın.
  • Movable değiştiricisinden gelen onPoseChange geri çağırma kaldırıldı. Bunun yerine onMove politikasını kullanın.
  • SubspaceModifiers, ayrılmışsa veya şu anda ayrılıyorsa efektlerini artık uygulamaz.
  • Mevcut SpatialRow API'si SpatialRow ve SpatialCurvedRow olarak ikiye ayrıldı. Daha önce SpatialRow'nın curveRadius parametresini kullanıyorsanız artık 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ığılabilir ve son uygulanan alfa veya ölçek değeri için değerlerini çarpacaktır.
  • onPoseChange Taşınabilir değiştiriciden gelen geri çağırma, daha sorunsuz poz hareketi 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ğırmalarını ana iş parçacığında gerçekleştirecek.
  • SubspaceLayout içindeki durum değişikliklerinin yeniden düzenlemeyi tetiklemesini sağlamak için düzen ve ölçüm aşamalarına durum gözlemi eklendi.
  • Mevcut değiştiricilerin daha iyi yeniden kullanılması için optimize edilmiş değiştirici zinciri güncellemeleri.

Hata Düzeltmeleri

  • SpatialDialog gösterildiğinde scrimming durdurulur. (Ic4594)
  • Değiştirici düğümler ayrılmış durumdayken yapılan yeniden düzenleme istekleri artık yoksayılacak.
  • Taşınabilir ve Yeniden Boyutlandırılabilir değiştiricileri tarafından tetiklenen yeniden düzenleme aşamaları kaldırıldı.
  • Boyutlardan biri doğrudan veya düzen hesaplaması sırasında (ör. SpatialRow/SpatialColumn hesaplaması) sıfıra ayarlandığında oluşan MainPanel() composable'daki kilitlenme sorunu düzeltildi. Panel artık gizlenecek. Bu düzeltmenin özellikle düzen aşamasındaki kilitlenmeleri ele aldığını unutmayın. Panelin kullanıcı etkileşimi yoluyla sıfıra yeniden boyutlandırılması ayrı olarak ele alınacaktır. Gizli panelde kullanıcı arayüzü olanakları yok.
  • Yeniden boyutlandırılabilir değiştiriciden maintainAspectRatio ile ilgili sorun düzeltildi. En boy oranı korunmalıdır.
  • İç içe yerleştirilmiş alt uzayların tek bir kare için yanlış konumlandırılmasına neden olan sorun düzeltildi.
  • Yuvarlak köşelerin bazen uygulanması gerektiği halde uygulanmaması sorunu düzeltildi.
  • NestedSubspaces artık yanlış konumdaki bir karede 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ümünden bu yana önemli bir değişiklik yapılmadan yayınlandı. 1.0.0-alpha03 sürümü bu commit'leri 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 commit'leri içerir.

Yeni Özellikler

  • Etkinlik paneli artık bir Spatial Dialog etkinleştirildiğinde içeriğini karartabilir.
  • Orbiter API artık SubspaceComposable bağlamlarında kullanılabilir ve Orbiters'ı en yakın SubspaceLayout tabanlı composable üst öğeye ekler.
  • Konuma dayalı özel değiştiricilere izin vermek için LayoutCoordinatesAwareModifierNode tanıtıldı.
  • SubspaceModifier.Node'ya ekleme/çıkarma yaşam döngüsü yöntemleri eklendi.
  • Hareket ettirilebilir değiştiriciye scaleWithDistance eklendi. scaleWithDistance etkinleştirildiğinde, taşınan alt alan öğesi büyür veya küçülür. Ayrıca, hareketten önce sahip olduğu açık ölçeği de korur.

API Değişiklikleri

  • SessionCallbackProvider, SpatialCapabilities lehine kaldırıldı.

Diğer değişiklikler

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

Hata düzeltmeleri

  • SubspaceModifier sıralamasını sabitlemeye yönelik düzeltmeler. SubspaceModifier daha güvenilir bir şekilde çalışmalıdır. Öteleme, döndürme, ölçeklendirme, taşınabilir ve yeniden boyutlandırılabilir değiştiriciler 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 iptal edilir.

İlk sürümdeki özellikler

  • Jetpack Compose for XR'ın ilk geliştirici sürümü. İster mevcut bir 2D uygulamayı XR'ye taşıyor ister sıfırdan yeni bir XR uygulaması oluşturuyor olun, XR'de mekansal 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ümler tabanlı kullanıcı arayüzünüzü uzamsal bir düzene yerleştirmenize olanak tanıyan alt alan ve uzamsal composable'lar (ör. uzamsal paneller ve yörüngeler) sağlar. 3D modeller gibi SceneCore öğelerini kullanıcı arayüzünüze göre yerleştirmenize olanak tanıyan Volume subspace composable'ı kullanıma sunar. Daha fazla bilgiyi bu geliştirici kılavuzunda bulabilirsiniz:

    • Subspace: Bu composable, uygulamanızın kullanıcı arayüzü hiyerarşisinde herhangi bir yere yerleştirilebilir. Böylece, dosyalar arasındaki bağlamı kaybetmeden 2D ve uzamsal kullanıcı arayüzü için düzenleri koruyabilirsiniz. Bu sayede, mevcut uygulama mimarisi gibi öğeleri tüm kullanıcı arayüzü ağacınızda durumu yükseltmenize veya uygulamanızın mimarisini yeniden tasarlamanıza gerek kalmadan XR ve diğer form faktörleri arasında paylaşmak kolaylaşır.

    • SpatialPanel: SpatialPanel, uygulama içeriğini görüntülemenize olanak tanıyan bir alt uzay bileşenidir. Örneğin, video oynatma, hareketsiz görüntüler veya diğer içerikleri SpatialPanel'de görüntüleyebilirsiniz.

    • Orbiter: Orbiter, uzamsal bir kullanıcı arayüzü bileşenidir. İlgili bir uzamsal panele eklenmek üzere tasarlanmıştır ve bu uzamsal panelle ilgili gezinme ve bağlamsal işlem öğelerini içerir. Örneğin, video içeriğini göstermek için bir uzamsal panel oluşturduysanız yörüngeye video oynatma kontrolleri ekleyebilirsiniz.

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

  • Uzamsal Yerleşim: SpatialRow, SpatialColumn, SpatialBox ve SpatialLayoutSpacer kullanarak birden fazla uzamsal panel oluşturup bunları Uzamsal Yerleşim'e yerleştirebilirsiniz. Düzeninizi özelleştirmek için SubspaceModifier simgesini kullanın.

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

    • SpatialDialog: Panel, yükseltilmiş bir iletişim kutusu göstermek için z derinliğinde biraz geriye itilir.
    • SpatialPopUp: Panel, yükseltilmiş bir pop-up göstermek için z derinliğinde biraz geriye itilir.
    • SpatialElevation: SpatialElevationLevel, yüksekliği eklemek için ayarlanabilir.
  • SpatialCapabilities: Kullanıcılar uygulamanızla veya sistemle etkileşimde bulundukça mekansal özellikler değişebilir, hatta uygulamanızın kendisi tarafından da değiştirilebilir (ör. Ev Alanı'na veya Tam Alan'a geçiş). Sorun yaşamamak için uygulamanızın, mevcut ortamda hangi API'lerin desteklendiğini belirlemek üzere LocalSpatialCapabilities.current olup olmadığını 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 minimum SDK sürümünün 30 olması gerekmektedir. Geçici çözüm olarak, 23 minSDK'sı ile derleme ve çalıştırma yapabilmek için aşağıdaki manifest girişini <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> ekleyebilirsiniz.
  • Jetpack XR uygulamalarının şu anda AndroidManifest'te android.permission.SCENE_UNDERSTANDING izni istemesi gerekiyor.
  • Bir uygulama, manifest dosyasındaki PROPERTY_XR_ACTIVITY_START_MODE özelliğini kullanarak doğrudan Tam Alan'da başlatıldığında Etkinlikler/Uygulamalar, Tam Alan'a geçmeden önce başlangıçta Ev Alanı'nda açılır.
  • Volume Composables'daki glTF'ler başlangıçta yanlış konumda titreyebilir.
  • Önemli ölçüde taşınmış bir panelde SpatialDialog kullanmak, içeriği yanlış yöne iter.