Bugün, Jetpack Compose Aralık 2025 sürümü kararlı hale geldi. Bu sürümde, temel Compose modüllerinin 1.10 sürümü ve Material 3'ün 1.4 sürümü (BOM eşlemesinin tamamını inceleyin) yer alır. Ayrıca yeni özellikler ve önemli performans iyileştirmeleri içerir.
Bugünkü sürümü kullanmak için Compose BOM sürümünüzü 2025.12.00 olarak yükseltin:
implementation(platform("androidx.compose:compose-bom:2025.12.00"))Performans iyileştirmeleri
Uygulamanızın çalışma zamanı performansının sizin ve kullanıcılarınız için çok önemli olduğunu biliyoruz. Bu nedenle, performans Compose ekibinin önceliklerinden biri olmuştur. Bu sürümde çeşitli iyileştirmeler yapıldı. En son sürüme yükselterek tüm bu iyileştirmelerden yararlanabilirsiniz. Dahili kaydırma karşılaştırmalarımız, Compose'un artık Görünümler'i kullanırken göreceğiniz performansla eşleştiğini gösteriyor:
Farklı Compose sürümlerinde Views ve Jetpack Compose'u karşılaştıran kaydırma performansı karşılaştırması
Lazy prefetch'te duraklatılabilir kompozisyon
Lazy prefetch'te duraklatılabilir oluşturma özelliği artık varsayılan olarak etkinleştirildi. Bu, Compose çalışma zamanının işleri planlama şeklini temelden değiştiren bir yeniliktir. Ağır kullanıcı arayüzü iş yükleri sırasında duraklamayı önemli ölçüde azaltmak için tasarlanmıştır.
Daha önce, bir kompozisyon başlatıldığında tamamlanması gerekiyordu. Kompozisyon karmaşıksa bu durum, ana iş parçacığını tek bir kareye göre daha uzun süre engelleyerek kullanıcı arayüzünün donmasına neden olabiliyordu. Duraklatılabilir kompozisyon sayesinde çalışma zamanı, süresi doluyorsa çalışmasını "duraklatabilir" ve çalışmaya bir sonraki karede devam edebilir. Bu özellik, kareleri önceden hazırlamak için tembel düzen önceden getirme ile birlikte kullanıldığında özellikle etkilidir. Compose 1.9'da kullanıma sunulan tembel düzen CacheWindow API'leri, daha fazla içeriği önceden getirmek ve çok daha sorunsuz bir kullanıcı arayüzü performansı elde etmek için duraklatılabilir kompozisyondan yararlanmak için harika bir yoldur.
Lazy prefetch ile birlikte duraklatılabilir kompozisyon, takılmayı azaltmaya yardımcı olur
Ayrıca Modifier.onPlaced, Modifier.onVisibilityChanged ve diğer değiştirici uygulamalarında iyileştirmeler yaparak performansı başka yerlerde de optimize ettik. Oluşturma özelliğinin performansını artırmaya yönelik yatırımlarımıza devam edeceğiz.
Yeni özellikler
Elde tutma
Compose, farklı yaşam döngülerinde durumu tutmak ve yönetmek için çeşitli API'ler sunar. Örneğin, remember, kompozisyonlar arasında durumu kalıcı hale getirir. rememberSavable/rememberSerializable ise etkinlik veya işlem yeniden oluşturma arasında durumu kalıcı hale getirir. retain, bu API'ler arasında yer alan yeni bir API'dir. Değerleri, yapılandırma değişiklikleri arasında seri hale getirilmeden kalıcı hale getirmenizi sağlar ancak işlem sonlandırma arasında kalıcı hale getirmez. retain durumunuzu seri hale getirmediğinden, lambda ifadeleri, akışlar ve bit eşlemler gibi kolayca seri hale getirilemeyen büyük nesneler gibi nesneleri kalıcı hale getirebilirsiniz. Örneğin, medya oynatmayı yapılandırma değişikliğinden kesintiye uğramayacak şekilde yönetmek için retain'i kullanabilirsiniz (ör. ExoPlayer).
@Composable
fun MediaPlayer() {
val applicationContext = LocalContext.current.applicationContext
val exoPlayer = retain { ExoPlayer.Builder(applicationContext).apply { ... }.build() }
...
}Bu özelliğin tasarımını etkileyen ve katkıda bulunan AndroidDev topluluğuna (özellikle Circuit ekibine) teşekkür ederiz.
Malzeme 1.4
material3 kitaplığının 1.4.0 sürümüne çeşitli yeni bileşenler ve geliştirmeler eklenmiştir:
TextFieldartık metin durumunu yönetmek için daha sağlam bir yöntem sunan deneysel birTextFieldStatetabanlı sürüm sunuyor. Ayrıca, yeniSecureTextFieldveOutlinedSecureTextFieldvaryantları da sunulmaktadır. MaterialTextcomposable'ı artık autoSize davranışını destekliyor.- Carousel bileşeni artık yeni bir
HorizontalCenteredHeroCarouselvaryantı sunuyor. TimePickerartık seçici ve giriş modları arasında geçiş yapmayı destekliyor.- Dikey sürükleme tutamacı, kullanıcıların uyarlanabilir bölmenin boyutunu ve/veya konumunu değiştirmesine yardımcı olur.
Yatay ortalanmış ana banner kaydırma bandı
Material 3 Expressive API'lerinin material3 kitaplığının alfa sürümlerinde geliştirilmeye devam ettiğini unutmayın. Daha fazla bilgi edinmek için şu yakın tarihli konuşmayı izleyin:
Yeni animasyon özellikleri
Paylaşılan öğe animasyonlarını özelleştirmeye yönelik güncellemeler de dahil olmak üzere animasyon API'lerimizi genişletmeye devam ediyoruz.
Dinamik paylaşılan öğeler
Varsayılan olarak, sharedElement() ve sharedBounds() animasyonları
Hedef durumda eşleşen bir anahtar bulunduğunda düzen değişir. Ancak, gezinme yönü veya mevcut kullanıcı arayüzü durumu gibi belirli koşullara bağlı olarak bu animasyonu dinamik olarak devre dışı bırakmak isteyebilirsiniz.
Paylaşılan öğe geçişinin gerçekleşip gerçekleşmeyeceğini kontrol etmek için artık SharedContentConfig öğesini rememberSharedContentState()'ye iletmek üzere özelleştirebilirsiniz. isEnabled özelliği, paylaşılan öğenin etkin olup olmadığını belirler.
SharedTransitionLayout {
val transition = updateTransition(currentState)
transition.AnimatedContent { targetState ->
// Create the configuration that depends on state changing.
fun animationConfig() : SharedTransitionScope.SharedContentConfig {
return object : SharedTransitionScope.SharedContentConfig {
override val SharedTransitionScope.SharedContentState.isEnabled: Boolean
get() =
// determine whether to perform a shared element transition
}
}
}Daha fazla bilgi için belgeleri inceleyin.
Modifier.skipToLookaheadPosition()
Bu sürümde, paylaşılan öğe animasyonları gerçekleştirilirken composable'ın son konumunu koruyan yeni bir değiştirici (Modifier.skipToLookaheadPosition()) eklendi. Bu, Androidify örneğinde kameranın kademeli olarak gösterilmesinde görüldüğü gibi "gösterme" türü animasyon gibi geçişlerin yapılmasını sağlar. Daha fazla bilgi için buradaki video ipucuna göz atın:
Paylaşılan öğe geçişlerinde ilk hız
Bu sürümde, paylaşılan öğe geçişine başlangıç hızı (ör. hareketten) iletmenize olanak tanıyan yeni bir paylaşılan öğe geçişi API'si (prepareTransitionWithInitialVelocity) eklenmiştir:
Modifier.fillMaxSize()
.draggable2D(
rememberDraggable2DState { offset += it },
onDragStopped = { velocity ->
// Set up the initial velocity for the upcoming shared element
// transition.
sharedContentStateForDraggableCat
?.prepareTransitionWithInitialVelocity(velocity)
showDetails = false
},
)
Bir hareketten gelen ilk hızla başlayan paylaşılan öğe geçişi
Örtülü geçişler
EnterTransition ve ExitTransition, AnimatedVisibility/AnimatedContent composable'ın nasıl görüneceğini veya kaybolacağını tanımlar. Yeni deneysel örtü seçeneği, içeriği örtmek veya karartmak için bir renk belirtmenize olanak tanır. Örneğin, içeriğin üzerine yarı opak siyah bir katman ekleyip katmanı yavaş yavaş görünür veya görünmez hale getirebilirsiniz:
Örtülü animasyonlu içerik: Animasyon sırasında ızgara içeriğinin üzerinde yarı opak bir örtü (veya tül) olduğunu unutmayın.
AnimatedContent(
targetState = page,
modifier = Modifier.fillMaxSize().weight(1f),
transitionSpec = {
if (targetState > initialState) {
(slideInHorizontally { it } togetherWith
slideOutHorizontally { -it / 2 } + veilOut(targetColor = veilColor))
} else {
slideInHorizontally { -it / 2 } +
unveilIn(initialColor = veilColor) togetherWith slideOutHorizontally { it }
}
},
) { targetPage ->
...
}
Yapılacak değişiklikler
Modifier.onFirstVisible işlevinin desteğinin sonlandırılması
Compose 1.9'da Modifier.onVisibilityChanged ve Modifier.onFirstVisible özellikleri kullanıma sunuldu. Geri bildiriminizi inceledikten sonra, Modifier.onFirstVisible sözleşmesinin kesin olarak yerine getirilemediği anlaşıldı. Özellikle de bir öğe ilk kez görünür olduğunda. Örneğin, Lazy düzen, görüntü alanının dışına kaydırılan öğeleri kaldırabilir ve tekrar görüntü alanına kaydırılırsa bunları yeniden oluşturabilir. Bu durumda, yeni oluşturulan bir öğe olduğundan onFirstVisible geri arama tekrar tetiklenir. onFirstVisible içeren, daha önce ziyaret edilmiş bir ekrana geri dönüldüğünde de benzer bir davranışla karşılaşılır. Bu nedenle, sonraki Compose sürümünde (1.11) bu değiştiricinin desteğini sonlandırmaya ve onVisibilityChanged'ye geçmenizi önermeye karar verdik. Daha fazla bilgi için belgeleri inceleyin.
Testlerde coroutine gönderme
Testlerdeki kararsızlığı azaltmak ve daha fazla sorunu yakalamak için testlerdeki coroutine dağıtımını değiştirmeyi planlıyoruz. Testler şu anda üretim davranışından farklı olan UnconfinedTestDispatcher kullanıyor. Örneğin, effects, sıraya alınmak yerine hemen çalıştırılabilir. Gelecekteki bir sürümde, üretim davranışlarıyla eşleşmek için varsayılan olarak StandardTestDispatcher kullanan yeni bir API'yi kullanıma sunmayı planlıyoruz. Yeni davranışı 1.10 sürümünde hemen deneyebilirsiniz:
@get:Rule // also createAndroidComposeRule, createEmptyComposeRule val rule = createComposeRule(effectContext = StandardTestDispatcher())
StandardTestDispatcher kullanıldığında görevler sıraya alınır. Bu nedenle, composeTestRule.waitForIdle() veya composeTestRule.runOnIdle() gibi senkronizasyon mekanizmalarını kullanmanız gerekir. Testinizde runTest kullanılıyorsa runTest ve Oluşturma kuralınızın senkronizasyon için aynı StandardTestDispatcher örneğini kullandığından emin olmanız gerekir.
// 1. Create a SINGLE dispatcher instance
val testDispatcher = StandardTestDispatcher()
// 2. Pass it to your Compose rule
@get:Rule
val composeRule = createComposeRule(effectContext = testDispatcher)
@Test
// 3. Pass the *SAME INSTANCE* to runTest
fun myTest() = runTest(testDispatcher) {
composeRule.setContent { /* ... */ }
}
Araçlar
Harika API'ler harika araçları hak eder ve Android Studio, Compose geliştiricileri için yakın zamanda eklenen çeşitli özelliklere sahiptir:
- Kullanıcı arayüzü dönüştürme:
@Previewsimgesini sağ tıklayıp Kullanıcı arayüzü dönüştürme'yi seçtikten sonra değişikliği doğal dilde açıklayarak tasarımlarınızı yineleyin. - Oluşturun
@Preview: Bir composable'ı sağ tıklayın ve Gemini > [Composable adı] Önizlemesi Oluştur'u seçin. - Vektör öğe sihirbazında simge varyasyonları için yeni destekle Material Symbols'ü özelleştirin.
- Ekran görüntüsünden kod oluşturun veya Gemini'dan mevcut kullanıcı arayüzünüzü hedef resimle eşleştirmesini isteyin. Bu, uzaktan MCP desteği ile birleştirilebilir. Örneğin, bir Figma dosyasına bağlanmak ve tasarımlardan Compose kullanıcı arayüzü oluşturmak için kullanılabilir.
- Kullanıcı arayüzü kalitesiyle ilgili sorunları düzeltme denetimi, kullanıcı arayüzünüzü erişilebilirlik sorunları gibi yaygın sorunlar açısından denetler ve ardından düzeltmeler önerir.
Bu araçların nasıl çalıştığını görmek için aşağıdaki son demoyu izleyin:
Happy Composing
Güzel ve zengin kullanıcı arayüzleri oluşturmak için ihtiyacınız olan API'leri ve araçları sunmak üzere Jetpack Compose'a yatırım yapmaya devam ediyoruz. Geri bildirimlerinize değer veriyoruz. Bu nedenle, lütfen bu değişiklikler veya bir sonraki sürümde görmek istediğiniz özellikler hakkındaki geri bildirimlerinizi sorun izleyicimizde paylaşın.
Okumaya devam edin
-
Ürün Haberleri
Jetpack Compose'un kullanıma sunulmasından bu yana geçen yaklaşık 5 yıl içinde, çeşitli Android cihazlarda muhteşem kullanıcı arayüzleri oluşturmak için ihtiyaç duyduğunuz tüm özellikleri, performansı ve araçları size sunmak üzere yatırım yaptık.
Nick Butcher • Okuma süresi: 2 dakika
-
Ürün Haberleri
Google I/O, her yıl Android geliştirme de dahil olmak üzere ekosistemler ve ürünlerle ilgili yeni duyurular ve kaynaklar sunar. Geliştirme süreci yapay zeka ve aracı destekli araçlara doğru kayarken Android için nasıl geliştirme yapmaya karar verirseniz verin sizi daha iyi desteklemek için tekliflerimizi genişlettik.
Simona Milanovic • Okuma süresi: 2 dakika
-
Ürün Haberleri
Google I/O 2026'da, Android ekosistemindeki en son gelişmelerin, geliştirme verimliliğini en üst düzeye çıkarırken uygulamanızın kalitesini artırmanıza nasıl yardımcı olabileceğini gösterdik.
Ataul Munim • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.