Jetpack Compose Aralık 2025 sürümü bugün kararlı sürüm olarak yayınlandı. Bu sürümde, temel Compose modüllerinin 1.10 sürümü ve Material 3'ün 1.4 sürümü (tam BoM eşlemesine bakın) 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'a 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 ne kadar önemli olduğunu biliyoruz. Bu nedenle, performans Compose ekibinin önceliklerinden biri olmuştur. Bu sürümde birçok iyileştirme 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 beste başlatıldığında tamamlanana kadar çalıştırılması gerekiyordu. Bir bileşim karmaşıksa bu durum, ana iş parçacığını tek bir kare süresinden daha uzun süre engelleyerek kullanıcı arayüzünün donmasına neden olabilir. Duraklatılabilir kompozisyon sayesinde, çalışma zamanı artık süresi doluyorsa çalışmasını "duraklatabilir" ve bir sonraki karede çalışmaya devam edebilir. Bu özellik, kareleri önceden hazırlamak için geç yükleme düzeni önceden getirme ile birlikte kullanıldığında özellikle etkilidir. Compose 1.9'da kullanıma sunulan Lazy 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.
Duraklatılabilir kompozisyon, Lazy prefetch ile birlikte 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 ve rememberSavable/rememberSerializable, etkinlik veya süreç 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 getirmeden ancak işlem sonlandırma arasında kalıcı hale getirmenizi sağlar. retain durumunuzu serileştirmediğinden, lambda ifadeleri, akışlar ve bit eşlemler gibi kolayca serileştirilemeyen büyük nesneler gibi nesneleri kalıcı hale getirebilirsiniz. Örneğin, medya oynatmayı yapılandırma değişikliği nedeniyle kesintiye uğramamasını sağlamak için retain kullanarak bir medya oynatıcıyı (ör. ExoPlayer) yönetebilirsiniz.
@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.
1.4. Materyal
material3 kitaplığının 1.4.0 sürümüne bir dizi yeni bileşen ve geliştirme eklenmiştir:
TextFieldartık deneysel birTextFieldStatetabanlı sürüm sunuyor. Bu sürüm, metnin durumunu yönetmek için daha sağlam bir yöntem sağlıyor. Ayrıca, yeniSecureTextFieldveOutlinedSecureTextFieldvaryantları da sunulmaktadır. MaterialTextcomposable'ı artık autoSize davranışını destekliyor.- Rulo 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 bir bölmenin boyutunu ve/veya konumunu değiştirmesine yardımcı olur.
Yatay olarak ortalanmış ana banner kaydırma alanı
material3 kitaplığının alfa sürümlerinde Material 3 Expressive API'lerinin geliştirilmeye devam ettiğini unutmayın. Daha fazla bilgi edinmek için şu son 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 iletilen şekilde ö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, ortak öğ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öster" 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 kullanıma sunuldu. Geri bildiriminizi inceledikten sonra, Modifier.onFirstVisible sözleşmesinin deterministik 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şturulmuş 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 karar verdik ve onVisibilityChanged'ye geçmenizi öneririz. Daha fazla bilgi için belgeleri inceleyin.
Testlerde coroutine gönderme
Testlerdeki kararlı olmama durumunu iyileştirmek ve daha fazla sorunu yakalamak için testlerdeki coroutine dağıtımını değiştirmeyi planlıyoruz. Şu anda testlerde üretim davranışından farklı olan UnconfinedTestDispatcher kullanılmaktadır. Örneğin, efektler 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 Compose kuralınızın senkronizasyon için aynı StandardTestDispatcher örneğini paylaştığı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'a mevcut kullanıcı arayüzünüzü hedef resimle eşleştirmesini sorun. 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 problemler 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. Görüşlerinize değer veriyoruz. Bu nedenle, bu değişiklikler veya bir sonraki adımda görmek istediğiniz yenilikler hakkındaki geri bildirimlerinizi lütfen sorun izleyicimizde paylaşın.
Okumaya devam edin
-
Ürün Haberleri
Android Emulator ile çeşitli cihaz etkileşimlerini test etmek artık her zamankinden daha kolay.
Steven Jenkins • Okuma süresi: 2 dakika
-
Ürün Haberleri
Her geliştiricinin yapay zeka iş akışı ve ihtiyaçları benzersizdir. Bu nedenle, yapay zekanın geliştirme sürecinize nasıl yardımcı olacağını seçebilmeniz önemlidir. Ocak ayında, Android Studio'daki yapay zeka işlevlerine güç katmak için yerel veya uzak bir yapay zeka modeli seçme özelliğini kullanıma sunduk.
Matthew Warner • Okuma süresi: 2 dakika
-
Ürün Haberleri
Android Studio Panda 3 artık kararlı ve üretimde kullanıma hazır. Bu sürüm, yapay zeka destekli iş akışlarınız üzerinde daha fazla kontrol ve özelleştirme imkanı sunarak yüksek kaliteli Android uygulamaları oluşturmayı her zamankinden daha kolay hale getiriyor.
Matt Dyor • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.