आज, Jetpack Compose का दिसंबर 2025 वर्शन स्थिर है. इसमें Compose के मुख्य मॉड्यूल का वर्शन 1.10 और मटीरियल डिज़ाइन 3 का वर्शन 1.4 शामिल है. पूरी बीओएम मैपिंग देखें. इसमें नई सुविधाएं जोड़ी गई हैं और परफ़ॉर्मेंस में काफ़ी सुधार किए गए हैं.
आज के वर्शन का इस्तेमाल करने के लिए, Compose बीओएम वर्शन को 2025.12.00 पर अपग्रेड करें:
implementation(platform("androidx.compose:compose-bom:2025.12.00"))परफ़ॉर्मेंस में सुधार
हम जानते हैं कि आपके और आपके उपयोगकर्ताओं के लिए, आपके ऐप्लिकेशन की रनटाइम परफ़ॉर्मेंस बहुत अहम है. इसलिए, Compose टीम ने परफ़ॉर्मेंस को सबसे ज़्यादा प्राथमिकता दी है. इस वर्शन में कई सुधार किए गए हैं. इन्हें पाने के लिए, आपको सिर्फ़ नए वर्शन पर अपग्रेड करना होगा. स्क्रोल करने की परफ़ॉर्मेंस के लिए, हमारे इंटरनल बेंचमार्क से पता चलता है कि Compose अब Views के बराबर परफ़ॉर्मेंस देता है:
स्क्रोल करने की परफ़ॉर्मेंस के लिए बेंचमार्क. इसमें Compose के अलग-अलग वर्शन में Views और Jetpack Compose की तुलना की गई है
लेज़ी प्रीफ़ेच में पॉज़ किया जा सकने वाला कंपोज़िशन
लेज़ी प्रीफ़ेच में पॉज़ किया जा सकने वाला कंपोज़िशन अब डिफ़ॉल्ट रूप से चालू है. यह Compose रनटाइम के शेड्यूल के काम करने के तरीके में एक बुनियादी बदलाव है. इसे यूज़र इंटरफ़ेस (यूआई) के ज़्यादा लोड होने पर, जंक को काफ़ी कम करने के लिए डिज़ाइन किया गया है.
पहले, कंपोज़िशन शुरू होने के बाद, उसे पूरा करना पड़ता था. अगर कंपोज़िशन जटिल था, तो इससे मुख्य थ्रेड एक फ़्रेम से ज़्यादा समय के लिए ब्लॉक हो सकता था. इससे यूज़र इंटरफ़ेस (यूआई) फ़्रीज़ हो जाता था. पॉज़ किए जा सकने वाले कंपोज़िशन की मदद से, रनटाइम अब अपना काम "पॉज़" कर सकता है. ऐसा तब किया जा सकता है, जब उसके पास समय कम हो. इसके बाद, वह अगले फ़्रेम में काम फिर से शुरू कर सकता है. लेज़ी लेआउट प्रीफ़ेच के साथ इसका इस्तेमाल करने पर, यह खास तौर पर असरदार होता है, ताकि फ़्रेम को समय से पहले तैयार किया जा सके. Compose 1.9 में पेश किए गए, लेज़ी लेआउट CacheWindow एपीआई, ज़्यादा कॉन्टेंट को प्रीफ़ेच करने और पॉज़ किए जा सकने वाले कंपोज़िशन का फ़ायदा पाने का एक शानदार तरीका है. इससे यूज़र इंटरफ़ेस (यूआई) की परफ़ॉर्मेंस को बेहतर बनाया जा सकता है.
लेज़ी प्रीफ़ेच के साथ पॉज़ किए जा सकने वाले कंपोज़िशन की मदद से, जंक को कम किया जा सकता है
हमने अन्य जगहों पर भी परफ़ॉर्मेंस को ऑप्टिमाइज़ किया है. जैसे, Modifier.onPlaced, Modifier.onVisibilityChanged, और अन्य मॉडिफ़ायर के लागू करने के तरीके में सुधार किए गए हैं. हम Compose की परफ़ॉर्मेंस को बेहतर बनाने के लिए लगातार काम करते रहेंगे.
नई सुविधाएं
बनाए रखना
Compose, अलग-अलग लाइफ़साइकल में स्टेट को बनाए रखने और मैनेज करने के लिए कई एपीआई उपलब्ध कराता है. उदाहरण के लिए, remember कंपोज़िशन के बीच स्टेट को बनाए रखता है. वहीं, rememberSavable/rememberSerializable की मदद से, गतिविधि या प्रोसेस को फिर से बनाने के दौरान स्टेट को बनाए रखा जा सकता है.retain एक नया एपीआई है, जो इन एपीआई के बीच काम करता है. इसकी मदद से, कॉन्फ़िगरेशन में बदलाव होने पर, वैल्यू को क्रम से लगाए बिना बनाए रखा जा सकता है. हालांकि, प्रोसेस बंद होने पर ऐसा नहीं किया जा सकता. retain आपकी स्टेट को क्रम से नहीं लगाता. इसलिए, लैम्डा एक्सप्रेशन, फ़्लो, और बिटमैप जैसे बड़े ऑब्जेक्ट को बनाए रखा जा सकता है. इन्हें आसानी से क्रम से नहीं लगाया जा सकता. उदाहरण के लिए, मीडिया प्लेयर (जैसे, ExoPlayer) को मैनेज करने के लिए, retain का इस्तेमाल किया जा सकता है. इससे यह पक्का किया जा सकता है कि कॉन्फ़िगरेशन में बदलाव होने पर, मीडिया प्लेबैक में कोई रुकावट न आए.
@Composable
fun MediaPlayer() {
val applicationContext = LocalContext.current.applicationContext
val exoPlayer = retain { ExoPlayer.Builder(applicationContext).apply { ... }.build() }
...
}हम AndroidDev कम्यूनिटी (खास तौर पर, Circuit टीम) का धन्यवाद करना चाहते हैं. इस टीम ने इस सुविधा के डिज़ाइन को बेहतर बनाने में अहम योगदान दिया है.
मटीरियल डिज़ाइन 1.4
material3 लाइब्रेरी के वर्शन 1.4.0 में, कई नए कॉम्पोनेंट और बेहतर सुविधाएं जोड़ी गई हैं:
TextFieldअब एक एक्सपेरिमेंटलTextFieldStateपर आधारित वर्शन उपलब्ध कराता है. इससे टेक्स्ट की स्टेट को मैनेज करने का ज़्यादा बेहतर तरीका मिलता है. इसके अलावा, नएSecureTextFieldऔरOutlinedSecureTextFieldवैरिएंट अब उपलब्ध हैं. मटीरियलTextकंपोज़ेबल अब autoSize के व्यवहार के साथ काम करता है.- कैरसेल कॉम्पोनेंट अब
HorizontalCenteredHeroCarouselवैरिएंट का नया उपलब्ध कराता है. TimePickerअब पिकर और इनपुट मोड के बीच स्विच करने की सुविधा देता है.- एक वर्टिकल ड्रैग हैंडल की मदद से, उपयोगकर्ता अडैप्टिव पैनल का साइज़ और/या उसकी जगह बदल सकते हैं.
हॉरिज़ॉन्टल सेंटर्ड हीरो कैरसेल
ध्यान दें कि मटीरियल डिज़ाइन 3 के एक्सप्रेसिव एपीआई को material3 लाइब्रेरी के अल्फ़ा वर्शन में विकसित किया जा रहा है. ज़्यादा जानने के लिए, हाल ही में हुई इस बातचीत को देखें:
ऐनिमेशन की नई सुविधाएं
हम अपने ऐनिमेशन एपीआई को लगातार बेहतर बना रहे हैं. इसमें, शेयर किए गए एलिमेंट के ऐनिमेशन को पसंद के मुताबिक बनाने के लिए अपडेट शामिल हैं.
डाइनैमिक शेयर किए गए एलिमेंट
डिफ़ॉल्ट रूप से, sharedElement() और sharedBounds() ऐनिमेशन, इन चीज़ों को ऐनिमेट करने की कोशिश करते हैं
लेआउट में बदलाव, जब भी टारगेट स्टेट में मैचिंग की मिलती है. हालांकि, कुछ शर्तों के आधार पर, इस ऐनिमेशन को डाइनैमिक तरीके से बंद किया जा सकता है. जैसे, नेविगेशन की दिशा या मौजूदा यूज़र इंटरफ़ेस (यूआई) की स्टेट.
शेयर किए गए एलिमेंट का ट्रांज़िशन होगा या नहीं, यह कंट्रोल करने के लिए, अब rememberSharedContentState() को पास किए गए SharedContentConfig को पसंद के मुताबिक बनाया जा सकता है. isEnabled प्रॉपर्टी से यह तय होता है कि शेयर किया गया एलिमेंट चालू है या नहीं.
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
}
}
}ज़्यादा जानकारी के लिए, दस्तावेज़ देखें.
Modifier.skipToLookaheadPosition()
इस वर्शन में एक नया मॉडिफ़ायर, Modifier.skipToLookaheadPosition() जोड़ा गया है. यह शेयर किए गए एलिमेंट के ऐनिमेशन करते समय, कंपोज़ेबल की फ़ाइनल पोज़िशन को बनाए रखता है. इससे “रीवील” टाइप के ऐनिमेशन जैसे ट्रांज़िशन किए जा सकते हैं. इसे Androidify के सैंपल में, कैमरे के प्रोग्रेसिव रीवील के साथ देखा जा सकता है. ज़्यादा जानकारी के लिए, यहां वीडियो टिप देखें:
शेयर किए गए एलिमेंट के ट्रांज़िशन में शुरुआती वेलोसिटी
इस वर्शन में, शेयर किए गए एलिमेंट के ट्रांज़िशन के लिए एक नया एपीआई, prepareTransitionWithInitialVelocity जोड़ा गया है. इसकी मदद से, शेयर किए गए एलिमेंट के ट्रांज़िशन में शुरुआती वेलोसिटी (जैसे, जेस्चर से) पास की जा सकती है:
Modifier.fillMaxSize()
.draggable2D(
rememberDraggable2DState { offset += it },
onDragStopped = { velocity ->
// Set up the initial velocity for the upcoming shared element
// transition.
sharedContentStateForDraggableCat
?.prepareTransitionWithInitialVelocity(velocity)
showDetails = false
},
)
शेयर किए गए एलिमेंट का ट्रांज़िशन, जो जेस्चर से शुरुआती वेलोसिटी के साथ शुरू होता है
वेल्ड ट्रांज़िशन
EnterTransition और ExitTransition से यह तय होता है कि AnimatedVisibility/AnimatedContent कंपोज़ेबल कैसे दिखता है या गायब होता है. वेल्ड का एक नया एक्सपेरिमेंटल विकल्प, आपको कॉन्टेंट को वेल्ड या स्क्रिम करने के लिए कोई रंग तय करने की अनुमति देता है. जैसे, कॉन्टेंट पर सेमी-ओपेक ब्लैक लेयर को फ़ेड इन/आउट करना:
वेल्ड किया गया ऐनिमेटेड कॉन्टेंट. ऐनिमेशन के दौरान, ग्रिड कॉन्टेंट पर सेमी-ओपेक वेल्ड (या स्क्रिम) देखें
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 ->
...
}
जल्द होने वाले बदलाव
Modifier.onFirstVisible को बंद करना
Compose 1.9 में, Modifier.onVisibilityChanged और Modifier.onFirstVisible को पेश किया गया था. आपकी राय की समीक्षा करने के बाद, यह साफ़ हो गया कि Modifier.onFirstVisible के कॉन्ट्रैक्ट को तय तरीके से पूरा नहीं किया जा सकता. खास तौर पर, जब कोई आइटम पहली बार दिखता है. उदाहरण के लिए, लेज़ी लेआउट, व्यूपोर्ट से बाहर स्क्रोल होने वाले आइटम को हटा सकता है. इसके बाद, अगर वे वापस व्यू में स्क्रोल होते हैं, तो उन्हें फिर से कंपोज़ किया जा सकता है. इस स्थिति में, onFirstVisible कॉलबैक फिर से ट्रिगर होगा, क्योंकि यह एक नया कंपोज़ किया गया आइटम है. पहले देखी गई स्क्रीन पर वापस जाने पर भी ऐसा ही होगा. इस स्क्रीन में onFirstVisible शामिल है. इसलिए, हमने Compose के अगले वर्शन (1.11) में इस मॉडिफ़ायर को बंद करने का फ़ैसला किया है. हमारा सुझाव है कि onVisibilityChanged पर माइग्रेट करें. ज़्यादा जानकारी के लिए, दस्तावेज़ देखें.
टेस्ट में कोरूटीन डिस्पैच
हम टेस्ट में कोरूटीन डिस्पैच में बदलाव करने की योजना बना रहे हैं, ताकि टेस्ट में गड़बड़ी की संभावना को कम किया जा सके और ज़्यादा समस्याओं को पकड़ा जा सके. फ़िलहाल, टेस्ट में UnconfinedTestDispatcher का इस्तेमाल किया जाता है.यह प्रोडक्शन के व्यवहार से अलग है. उदाहरण के लिए, इफ़ेक्ट को एनक्वीव करने के बजाय, तुरंत चलाया जा सकता है. हम आने वाले समय में एक नया एपीआई पेश करने की योजना बना रहे हैं. यह प्रोडक्शन के व्यवहार से मेल खाने के लिए, डिफ़ॉल्ट रूप से StandardTestDispatcher का इस्तेमाल करेगा. 1.10 में अभी नया व्यवहार आज़माया जा सकता है:
@get:Rule // also createAndroidComposeRule, createEmptyComposeRule val rule = createComposeRule(effectContext = StandardTestDispatcher())
StandardTestDispatcher का इस्तेमाल करने पर, टास्क को क्यू में रखा जाएगा. इसलिए, आपको composeTestRule.waitForIdle() या composeTestRule.runOnIdle() जैसे सिंक्रनाइज़ेशन मैकेनिज़्म का इस्तेमाल करना होगा. अगर आपके टेस्ट में runTest का इस्तेमाल किया जाता है, तो आपको यह पक्का करना होगा कि सिंक्रनाइज़ेशन के लिए, runTest और आपके Compose नियम, StandardTestDispatcher के एक ही इंस्टेंस को शेयर करें.
// 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 { /* ... */ }
}
टूल
बेहतरीन एपीआई के लिए, बेहतरीन टूल की ज़रूरत होती है. Android Studio में, Compose डेवलपर के लिए हाल ही में कई नई सुविधाएं जोड़ी गई हैं:
- यूज़र इंटरफ़ेस (यूआई) को ट्रांसफ़ॉर्म करना: अपने डिज़ाइन को बेहतर बनाने के लिए,
@Previewपर राइट क्लिक करें. इसके बाद, यूज़र इंटरफ़ेस (यूआई) को ट्रांसफ़ॉर्म करें को चुनें. फिर, सामान्य भाषा में बदलाव के बारे में बताएं. @Previewजनरेट करना: किसी कंपोज़ेबल पर राइट-क्लिक करें और Gemini > [कंपोज़ेबल का नाम] की झलक जनरेट करें को चुनें.- वेक्टर ऐसेट विज़र्ड में आइकॉन के वैरिएंट के लिए नई सुविधा की मदद से, मटीरियल सिंबल को पसंद के मुताबिक बनाना.
- स्क्रीनशॉट से कोड जनरेट करना या Gemini से कहें कि वह आपके मौजूदा यूज़र इंटरफ़ेस (यूआई) को टारगेट इमेज से मैच करे. इसे रिमोट एमसीपी की सुविधा के साथ जोड़ा जा सकता है. जैसे, Figma फ़ाइल से कनेक्ट करना और डिज़ाइन से Compose यूज़र इंटरफ़ेस (यूआई) जनरेट करना.
- यूज़र इंटरफ़ेस (यूआई) की क्वालिटी से जुड़ी समस्याओं को ठीक करना सुविधा, आपके यूज़र इंटरफ़ेस (यूआई) में आम समस्याओं की जांच करती है. जैसे, सुलभता से जुड़ी समस्याएं. इसके बाद, उन्हें ठीक करने के सुझाव देती है.
इन टूल को ऐक्शन में देखने के लिए, हाल ही में किया गया यह डेमो देखें:
Compose का इस्तेमाल करके शानदार यूज़र इंटरफ़ेस (यूआई) बनाएं
हम Jetpack Compose को बेहतर बनाने के लिए लगातार काम कर रहे हैं, ताकि आपको शानदार और बेहतर यूज़र इंटरफ़ेस (यूआई) बनाने के लिए ज़रूरी एपीआई और टूल उपलब्ध कराए जा सकें. हम आपकी राय को अहमियत देते हैं. इसलिए, कृपया इन बदलावों के बारे में अपनी राय या सुझाव दें. इसके अलावा, हमें यह भी बताएं कि आपको हमारे इश्यू ट्रैकर में आगे क्या देखना है.
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
Jetpack Compose के लॉन्च होने के बाद से, हमने आपको वे सभी सुविधाएं, परफ़ॉर्मेंस, और टूल उपलब्ध कराने के लिए काम किया है जिनकी मदद से, Android के अलग-अलग डिवाइसों के लिए शानदार यूज़र इंटरफ़ेस (यूआई) बनाए जा सकते हैं.
Nick Butcher • दो मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
हर साल, Google I/O में अलग-अलग इकोसिस्टम और प्रॉडक्ट के लिए नई सूचनाएं और संसाधन पेश किए जाते हैं. इनमें Android डेवलपमेंट भी शामिल है. डेवलपमेंट, एआई और एजेंट की मदद से काम करने वाले टूल की ओर बढ़ रहा है. इसलिए, हमने अपनी पेशकशों को बढ़ाया है, ताकि Android के लिए किसी भी तरीके से डेवलपमेंट करने में आपकी मदद की जा सके.
Simona Milanovic • दो मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
Google I/O 2026 में, हमने दिखाया कि Android इकोसिस्टम में हुए नए डेवलपमेंट से, आपके ऐप्लिकेशन की क्वालिटी को कैसे बेहतर बनाया जा सकता है. साथ ही, डेवलपमेंट की प्रोसेस को ज़्यादा असरदार कैसे बनाया जा सकता है.
Ataul Munim • तीन मिनट में पढ़ें
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई जानकारी हर हफ़्ते अपने इनबॉक्स में पाएं.