Jetpack Compose — Google tomonidan Android ishlab chiqish uchun yaratilgan zamonaviy deklarativ UI framework-i, barqaror 1.0 versiyasi 2021-yil iyul oyida taqdim etilgan. Compose imperativ XML belgilash va View tizimini @Composable annotatsiyasi bilan Kotlin funksiyalariga almashtiradi. Google I/O (2025) ma'lumotlariga ko'ra, Compose Android-dagi yangi loyihalarning 55 foizida qo'llaniladi va UI kodining o'rtacha hajmi XML ga nisbatan 30–50 foizga kamayadi. Framework State o'zgarganda ekranning faqat o'zgargan qismlarini avtomatik qayta chizadi, notifyDataSetChanged yoki findViewById ni qo'lda chaqirishni bartaraf qiladi.
Asosiy
Jetpack Compose — reaktiv dasturlash tamoyillari asosida qurilgan Google UI framework-i. Activity XML layout, FragmentManager va ViewBinding o'rniga, dasturchi interfeysni @Composable annotatsiyasi bilan Kotlin funksiyalari orqali tavsiflaydi. Compose LayoutInflater dan foydalanmaydi — UI bayt kodiga kompilyatsiya qilinadigan sof Kotlin funksiyalaridir. Framework bir nechta kutubxonadan iborat: Compose UI (asosiy komponentlar Text, Button, Column, Row), Compose Foundation (Material Design, Imo-ishoralar, Focus), Compose Material3 (Dynamic Colors bilan Material You) va Compose Runtime (State, Side Effects, Coroutines). Compose Android API 21+ (Android 5.0) da ishlaydi va ComposeView — AndroidView adapteri orqali mavjud View/XML kodi bilan to'liq mos keladi.
View System (2008) qo'lda boshqariladigan View obyektlari iyerarxiyasidan foydalanadi: dasturchi XML layout yaratadi, findViewById orqali View topadi, RecyclerView uchun Adapter implementatsiya qiladi va ma'lumotlar o'zgarganda notifyDataSetChanged ni chaqiradi. Compose UI ni funksional tavsiflaydi: holat o'zgarganda framework faqat o'zgargan Composable funksiyalarini qayta ishga tushiradi (recompose), diff hisoblaydi va Canvas ga minimal o'zgarishlarni qo'llaydi. Compose ning ishlashi View System bilan solishtirish mumkin, murakkab ro'yxatlar (LazyColumn) ssenariylarida esa key parametri orqali keraksiz elementlarni o'tkazib yuborib, RecyclView dan tez-tez ustun keladi. IT Sectr da Compose minSdk 24+ bo'lgan Android ilovalarining yangi modullarida qo'llaniladi.
@Composable — oddiy Kotlin funksiyasini UI qurilish blokiga aylantiruvchi annotatsiya. Composable funksiyalari boshqa Composable funksiyalarini chaqirishi mumkin, komponentlar daraxtini hosil qiladi. View dan farqli o'laroq, Composable funksiyalari sukut bo'yicha holatga ega emas — ular stateless va kirish parametrlari yoki State har o'zgarganda qayta chiziladi. Kompilyator (Compose Compiler) @Composable funksiyalarini to'xtatilishi va tiklanishi mumkin bo'lgan kodga aylantiradi (positional memoization) — bu Compose ga daraxtni to'liq qayta qurmasdan faqat o'zgargan qismlarni qayta ishga tushirish imkonini beradi.
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun UserProfile(name: String, avatarUrl: String) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
AsyncImage(
model = avatarUrl,
contentDescription = "User avatar",
modifier = Modifier.size(48.dp)
)
Spacer(modifier = Modifier.width(12.dp))
Text(
text = name,
style = MaterialTheme.typography.titleMedium
)
}
}UserProfile funksiyasi name va avatarUrl parametrlarini qabul qiladi, avatar va nom bilan qator quradi. Modifier.fillMaxWidth() komponentni to'liq kenglikka cho'zadi, .padding(16.dp) bo'shliqlar qo'shadi. MaterialTheme.typography.titleMedium Material 3 tizim uslubidan foydalanadi. name yoki avatarUrl parametrlari o'zgarganda Compose UserProfile ni qayta ishga tushiradi — komponentni yangi qiymatlar bilan qayta yaratish.
State Compose da — o'zgarishi bog'liq @Composable funksiyalarining rekompozitsiyasiga (qayta ishga tushishiga) sabab bo'ladigan istalgan qiymat. Asosiy usul — Compose snapshot tizimini qo'llab-quvvatlovchi MutableState<T> yaratuvchi mutableStateOf() dir. Snapshot — o'zgarishlarni kuzatish mexanizmi: State ga yozishda Compose joriy Snapshot ni dirty deb belgilaydi va rekompozitsiya rejalashtiruvchisi faqat shu State ni o'qiyotgan Composable funksiyalarini qayta ishga tushiradi. Observable kolleksiyalar uchun mutableStateListOf() va mutableStateMapOf() dan foydalaning. Compose Kotlin Flow uchun collectAsState() va LiveData uchun observeAsState() orqali Lifecycle-Aware komponentlardan State ni qo'llab-quvvatlaydi.
@Composable
fun LikeButton() {
var liked by remember { mutableStateOf(false) }
var count by remember { mutableStateOf(42) }
Button(
onClick = {
liked = !liked
if (liked) count++ else count--
},
colors = ButtonDefaults.buttonColors(
containerColor = if (liked) MaterialTheme.colorScheme.primary
else MaterialTheme.colorScheme.surfaceVariant
)
) {
Text("♥ $count")
}
}Kod liked (Boolean) va count (Int) holati bilan mutableStateOf() orqali saqlanadigan «Like» tugmasini yaratadi. Bosilganda liked teskari o'giriladi, hisoblagich oshadi/kamayadi — Compose avtomatik LikeButton ni qayta ishga tushiradi. by delegate State dan oddiy o'zgaruvchi kabi foydalanish imkonini beradi: liked.value = !liked.value o'rniga liked = !liked. Tugma rangi primary (yoqtirilgan) va surfaceVariant (yoqtirilmagan) o'rtasida reaktiv o'zgaradi.
remember — qiymatni rekompozitsiyalar o'rtasida keshlovchi Compose funksiyasi. remember bo'lmasa Composable funksiyasining har bir qayta ishga tushishi yangi holat (mutableStateOf) yaratadi — bu ilova mantiqini buzadi: ekran aylantirilganda yoki ota-ona State o'zgarganda hisoblagich tiklanadi. remember kalkulyator-lambda qabul qiladi va qiymatni faqat birinchi kompozitsiyada hisoblaydi; keyingilarida keshlangan natijani qaytaradi. Keshni tiklash uchun remember(key) dan foydalaning — kalit qiymat qachon qayta hisoblanishini belgilaydi. remember(key1, key2) har qanday kalit o'zgarganda qayta hisoblaydi. Uzoq muddatli holatlar (ekran aylanishidan omon qoladigan) uchun rememberSaveable dan foydalaning — SavedStateHandle orqali Bundle da saqlanadigan remember analogi.
@Composable
fun TimerScreen() {
var seconds by rememberSaveable { mutableStateOf(0) }
LaunchedEffect(Unit) {
while (true) {
delay(1000)
seconds++
}
}
Column(
modifier = Modifier.fillMaxSize().padding(32.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "O'tgan vaqt: ${seconds}s",
style = MaterialTheme.typography.displayMedium
)
}
}rememberSaveable ekran aylantirilganda (konfiguratsiya o'zgarishi) seconds ni saqlaydi. LaunchedEffect har soniyada seconds ni oshiruvchi korutin ishga tushiradi. TimerScreen rekompozitsiyasida (har soniyada) seconds rememberSaveable tufayli tiklanmaydi. Konfiguratsiya o'zgarishlaridan omon qolmasligi kerak bo'lgan holat uchun (masalan, animatsiya bayroqlari) oddiy remember dan foydalaning.
Modifier — Composable komponentlarining ko'rinishi, harakati va layout ini sozlash uchun Builder namunasini implementatsiya qiluvchi o'zgarmas konteyner-obyekt. Modifier metodining har bir chaqiruvi (.padding(), .width(), .clickable(), .background()) qo'shilgan element bilan yangi Modifier qaytaradi. Modifikatorlarning tartibi muhim: .padding(16.dp).clickable { } — bo'shliq bosish ishlov beruvchisidan oldin qo'llaniladi, clickable bo'shliqni hisobga olgan holda butun maydonni kuzatadi. .clickable { }.padding(16.dp) — bosish uchun bo'shliqdan oldingi butun maydon, bo'shliq tarkibni ichkariga siljitadi. Modifier then(otherModifier) orqali maxsus implementatsiyalarni va ota-ona sozlamalariga kirish uchun compositionLocal ni qo'llab-quvvatlaydi.
@Composable
fun CardExample() {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.clickable { println("Karta bosildi") },
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surfaceVariant
)
) {
Column(modifier = Modifier.padding(16.dp)) {
Text("Jetpack Compose", style = MaterialTheme.typography.titleLarge)
Spacer(modifier = Modifier.height(8.dp))
Text(
"State va Modifier bilan Android uchun Deklarativ UI",
style = MaterialTheme.typography.bodyMedium
)
}
}
}CardExample Modifier zanjirini namoyish etadi: fillMaxWidth + padding + clickable. Card — o'zining elevation va colors sozlamalari bilan Material3 komponenti. Ichma-ich Column ichki padding 16dp ga ega. Compose Material3 Android 12+ da ranglarni avtomatik Dynamic Color (Material You) ga moslashtiradi. Card Compose dagi 30+ o'rnatilgan Material3 komponentlaridan biridir.
State hoisting — holatni Composable funksiyasidan uni chaqiruvchiga ko'tarish namunasi, funksiyani stateless qiladi. Stateless komponent parametrlar orqali ma'lumotlar va callback larni qabul qiladi, o'z State iga ega emas. Bu qayta foydalanish va test qilish imkoniyatini oshiradi: komponentni turli State lar bilan chaqirish va preview da tekshirish mumkin. Google arxitekturani tavsiya qiladi: ViewModel + StateFlow (yoki MutableStateFlow) + Compose da collectAsState(). ViewModel holatni ekran darajasiga ko'taradi, Compose ko'rsatadi. Yon ta'sirlar (LaunchedEffect, DisposableEffect) bir martalik hodisalarni boshqaradi.
| Komponent | Vazifa | Texnologiya |
|---|---|---|
| ViewModel | State ni saqlash, biznes mantiq | StateFlow, MutableStateFlow |
| Screen Composable | Ekran tashkili, State hoisting | collectAsState(), Scaffold, LazyColumn |
| Stateless Component | Holatsiz UI, sof ko'rsatish | @Composable parametrlar + lambdalar |
| Side Effect | Bir martalik harakatlar (snackbar, navigatsiya) | LaunchedEffect, SnackbarHostState |
Tez-tez beriladigan savollar
XML layoutlar imperativdir: LayoutInflater XML yuklaydi, findViewById View topadi, dasturchi qo'lda matn/ro'yxatlarni yangilaydi. Compose deklarativ: UI Kotlin @Composable funksiyalari bilan tavsiflanadi va framework State o'zgarganda avtomatik faqat o'zgargan qismlarni qayta chizadi. Compose UI kod hajmini 30–50% kamaytiradi va XML dan foydalanmaydi.
Ha, Google Navigation Compose — ekranlar o'rtasida deklarativ navigatsiya uchun kutubxona taqdim etadi. NavController marshrutlar stekini boshqaradi, composable() ekranlarni ro'yxatdan o'tkazadi, navArgument parametrlarni uzatadi. Alternativlar: Voyager (jamiyat) va Decompose (Badoo). Navigation Compose deep links va type-safe argumentlarni qo'llab-quvvatlovchi rasmiy standartdir.
Modifier — Composable komponentlariga qo'llaniladigan stillashtirish namunalarining (padding, size, clickable, background, border, clip) o'zgarmas konteyneri. Har bir chaqiruv qo'shilgan element bilan yangi Modifier qaytaradi. Tartib muhim: .padding().clickable() bosishdan oldin bo'shliq qo'llaydi, .clickable().padding() — aksincha. Modifier Compose komponentlarini sozlashning asosiy usulidir.
Jetpack Compose Android API 21+ (Android 5.0 Lollipop) ni Compose Compiler va Compose BOM orqali qo'llab-quvvatlaydi. Material 3 (Dynamic Colors) Android 12+ da mavjud; eski versiyalarda fallback palitrasi ishlatiladi. Yangi loyihalar uchun Apple minSdk 24+ (Android 7.0) ni tavsiya qiladi, bu Compose tomonidan to'liq qoplanadi.
Google Compose UI Test — JVM (Desktop) va emulatorda test qilish uchun kutubxona taqdim etadi. Asosiy funksiyalar: composeTestRule.setContent { } komponentni ko'rsatish uchun, onNodeWithText() elementlarni topish uchun, performClick()/performTextInput() harakatlar uchun. Espresso testlari ComposeTestRule orqali Compose bilan mos keladi, ammo Compose UI Test afzal va tezroq yondashuvdir.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.