आज, Jetpack Compose का दिसंबर 2025 वाला वर्शन स्टेबल है. इसमें Compose के मुख्य मॉड्यूल का वर्शन 1.10 और Material 3 का वर्शन 1.4 शामिल है. पूरी BOM मैपिंग देखें. इसमें नई सुविधाएं जोड़ी गई हैं और परफ़ॉर्मेंस में काफ़ी सुधार किए गए हैं.
आज की रिलीज़ का इस्तेमाल करने के लिए, अपने Compose BOM वर्शन को 2025.12.00 पर अपग्रेड करें:
implementation(platform("androidx.compose:compose-bom:2025.12.00"))
परफ़ॉर्मेंस में सुधार
हम जानते हैं कि आपके और आपके उपयोगकर्ताओं के लिए, ऐप्लिकेशन की रनटाइम परफ़ॉर्मेंस बहुत ज़रूरी है. इसलिए, परफ़ॉर्मेंस को Compose टीम ने सबसे ज़्यादा प्राथमिकता दी है. इस रिलीज़ में कई सुधार किए गए हैं. आपको ये सभी सुधार, सिर्फ़ नए वर्शन पर अपग्रेड करके मिल सकते हैं. स्क्रोल करने से जुड़े हमारे इंटरनल बेंचमार्क से पता चलता है कि Compose अब Views के बराबर परफ़ॉर्म करता है:
स्क्रोल करने की परफ़ॉर्मेंस का बेंचमार्क, जिसमें Compose के अलग-अलग वर्शन में व्यू और Jetpack Compose की तुलना की गई है
लेज़ी प्रीफ़ेच में रोके जा सकने वाले कंपोज़िशन
लेज़ी प्रीफ़ेच में रोके जा सकने वाले कंपोज़िशन की सुविधा अब डिफ़ॉल्ट रूप से चालू होती है. यह Compose रनटाइम के शेड्यूल के काम करने के तरीके में एक बुनियादी बदलाव है. इसे यूज़र इंटरफ़ेस (यूआई) के ज़्यादा वर्कलोड के दौरान, जंक को काफ़ी कम करने के लिए डिज़ाइन किया गया है.
पहले, कंपोज़िशन शुरू होने के बाद, उसे पूरा होने तक चलाना पड़ता था. अगर कंपोज़िशन जटिल थी, तो इससे मुख्य थ्रेड एक फ़्रेम से ज़्यादा समय तक ब्लॉक हो सकती थी. इससे यूज़र इंटरफ़ेस (यूआई) फ़्रीज़ हो जाता था. रोकने की सुविधा वाली कंपोज़िशन की मदद से, रनटाइम अब समय खत्म होने पर अपने काम को "रोक" सकता है. साथ ही, अगले फ़्रेम में काम को फिर से शुरू कर सकता है. यह सुविधा, लेज़ी लेआउट प्रीफ़ेच के साथ इस्तेमाल करने पर ज़्यादा असरदार होती है. इससे फ़्रेम को समय से पहले तैयार किया जा सकता है. Compose 1.9 में पेश किए गए Lazy लेआउट CacheWindow एपीआई, ज़्यादा कॉन्टेंट को पहले से फ़ेच करने का एक शानदार तरीका है. साथ ही, इससे यूज़र इंटरफ़ेस (यूआई) की परफ़ॉर्मेंस को बेहतर बनाने के लिए, पॉज़ किए जा सकने वाले कंपोज़िशन का फ़ायदा मिलता है.
रेंडरिंग को कुछ समय के लिए रोकने की सुविधा और लेज़ी प्रीफ़ेचिंग की मदद से, जंक को कम किया जा सकता है
हमने अन्य जगहों पर भी परफ़ॉर्मेंस को ऑप्टिमाइज़ किया है. साथ ही, Modifier.onPlaced, Modifier.onVisibilityChanged, और अन्य मॉडिफ़ायर लागू करने की प्रोसेस को बेहतर बनाया है. हम कंपोज़ की परफ़ॉर्मेंस को बेहतर बनाने के लिए, निवेश करना जारी रखेंगे.
नई सुविधाएं
बनाए रखें
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में अब पिकर और इनपुट मोड के बीच स्विच किया जा सकता है. - वर्टिकल ड्रैग हैंडल की मदद से, उपयोगकर्ता अडैप्टिव पैन का साइज़ और/या पोज़िशन बदल सकते हैं.
हॉरिज़ॉन्टल सेंटर में मौजूद हीरो कैरसेल
ध्यान दें कि material3 लाइब्रेरी की ऐल्फ़ा रिलीज़ में, Material 3 Expressive API को डेवलप किया जा रहा है. ज़्यादा जानने के लिए, यह हाल ही का टॉक देखें:
ऐनिमेशन से जुड़ी नई सुविधाएं
हम अपने ऐनिमेशन एपीआई को बेहतर बनाते रहेंगे. इसमें शेयर किए गए एलिमेंट के ऐनिमेशन को पसंद के मुताबिक बनाने से जुड़े अपडेट भी शामिल हैं.
डाइनैमिक शेयर किए गए एलिमेंट
डिफ़ॉल्ट रूप से, sharedElement() और sharedBounds() ऐनिमेशन, इन चीज़ों को ऐनिमेट करने की कोशिश करते हैं
टारगेट की स्थिति में मिलती-जुलती कोई कुंजी मिलने पर, लेआउट बदल जाता है. हालांकि, कुछ शर्तों के आधार पर इस ऐनिमेशन को डाइनैमिक तरीके से बंद किया जा सकता है. जैसे, नेविगेशन की दिशा या यूज़र इंटरफ़ेस (यूआई) की मौजूदा स्थिति.
शेयर किए गए एलिमेंट का ट्रांज़िशन होगा या नहीं, यह कंट्रोल करने के लिए अब SharedContentConfig को अपनी पसंद के मुताबिक बनाया जा सकता है. इसके बाद, इसे rememberSharedContentState() को पास किया जा सकता है. 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 और कंपोज़ करने के नियम के लिए, एक ही 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 > [कंपोज़ किए जा सकने वाले आइटम का नाम] की झलक जनरेट करें को चुनें. - वेक्टर ऐसेट विज़र्ड में आइकॉन के अलग-अलग वर्शन के लिए नई सुविधा की मदद से, Material Symbols को पसंद के मुताबिक बनाएं.
- स्क्रीनशॉट से कोड जनरेट करें या Gemini से आपके मौजूदा यूज़र इंटरफ़ेस (यूआई) को टारगेट इमेज से मैच करने के लिए कहें. इसे रिमोट एमसीपी सपोर्ट के साथ जोड़ा जा सकता है. जैसे, किसी Figma फ़ाइल से कनेक्ट करने और डिज़ाइन से Compose UI जनरेट करने के लिए.
- यूज़र इंटरफ़ेस की क्वालिटी से जुड़ी समस्याएं ठीक करें सुविधा, आपके यूज़र इंटरफ़ेस की जांच करके सामान्य समस्याओं का पता लगाती है. जैसे, सुलभता से जुड़ी समस्याएं. इसके बाद, इन समस्याओं को ठीक करने के सुझाव देती है.
इन टूल को काम करते हुए देखने के लिए, हाल ही में किया गया यह डेमो देखें:
ईमेल लिखने का आनंद लें
हम Jetpack Compose को बेहतर बनाने के लिए लगातार काम कर रहे हैं. इससे आपको सुंदर और बेहतर यूज़र इंटरफ़ेस (यूआई) बनाने के लिए ज़रूरी एपीआई और टूल उपलब्ध कराए जा सकेंगे. आपके सुझाव हमारे लिए मायने रखते हैं. इसलिए, कृपया इन बदलावों के बारे में अपने सुझाव/राय दें या हमें बताएं कि आपको हमारे समस्या ट्रैकर में आगे क्या देखना है.
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
Jetpack Compose का अप्रैल 2026 वाला वर्शन, स्टेबल वर्शन है. इस रिलीज़ में, Compose के मुख्य मॉड्यूल का वर्शन 1.11 (पूरी बीओएम मैपिंग देखें), शेयर किए गए एलिमेंट को डीबग करने वाले टूल, ट्रैकपैड इवेंट वगैरह शामिल हैं.
Meghan Mehta • पांच मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
Android Studio Panda 4 अब स्टेबल हो गया है और प्रोडक्शन में इस्तेमाल के लिए तैयार है. इस रिलीज़ में प्लानिंग मोड, अगले बदलाव का अनुमान लगाने की सुविधा, और अन्य सुविधाएं शामिल हैं. इससे अच्छी क्वालिटी वाले Android ऐप्लिकेशन बनाना पहले से ज़्यादा आसान हो गया है.
Matt Dyor • पांच मिनट में पढ़ें
-
प्रॉडक्ट से जुड़ी खबरें
अगर आप एक Android डेवलपर हैं और आपको अपने ऐप्लिकेशन में एआई की नई सुविधाएं लागू करनी हैं, तो हमने हाल ही में कुछ नए अपडेट लॉन्च किए हैं.
Thomas Ezan • तीन मिनट में पढ़ें
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.