CameraX — murakkab Camera2 ustida oddiy va izchil API ta'minlovchi Android Jetpack kutubxonasi. Yuzlab Android qurilma modellari orasidagi farqlarni abstraksiya qiladi va turli qurilmalarda kameraning bir xil harakatini kafolatlaydi. Android Developer CameraX Guide (2026) ma'lumotiga ko'ra, kutubxona Google Play'da 25 000+ ilovalarda ishlatiladi va API Level 21 va undan yuqori qurilmalarda ishlaydi.
Asosiy fikrlar
CameraX — Android Jetpack tarkibidagi kutubxona bo'lib, birinchi marta Google tomonidan 2019-yilda eskirgan Camera API o'rnini bosuvchi va murakkab Camera2 ga soddalashtirilgan muqobil sifatida chiqarilgan. CameraX ning asosiy falsafasi — "bir marta yoz, barcha qurilmalarda ishlasin". Kutubxona avtomatik ravishda apparat farqlarini boshqaradi: kameralarning joylashuvi, qo'llab-quvvatlanadigan rezolyutsiyalar, sensor orientatsiyasi va mavjud formatlar — dasturchi qurilma-spesifik kod yozishi shart emas.
CameraX arxitekturasi use case'larga asoslangan: Preview (kameradan tasvirni Viewfinder'da ko'rsatish), ImageCapture (suratga olish), ImageAnalysis (ML uchun kadrlar oqimini tahlil qilish) va VideoCapture (video yozish). Har bir use case mustaqil komponent bo'lib, birlashtirilishi mumkin: bir vaqtning o'zida Preview vizor uchun va ImageAnalysis ML qayta ishlash uchun ishga tushiriladi. Google (2026) ma'lumotiga ko'ra, CameraX 99% Android qurilmalarida API 21+ bilan qo'llab-quvvatlanadi.
CameraX old va orqa kameralar o'rtasida avtomatik almashish, sessiyani qayta yaratmasdan ekran aylantirish, LifecycleOwner orqali o'rnatilgan hayot tsiklini boshqarish, use case'larni bir Lifecycle jarayoniga bog'lash, portret, HDR va tungi rejim uchun Camera2 Extensions qo'llab-quvvatlash, shuningdek haqiqiy qurilmasiz unit test uchun TestableCameraX ni ta'minlaydi.
CameraX to'rtta standart use case'ni belgilaydi, ularning har biri kamera bilan ishlashning aniq vazifasini hal qiladi. Use case'lar birlashtirilishi mumkin: eng mashhur kombinatsiyalar kamera uchun Preview + ImageCapture va ML skaner uchun Preview + ImageAnalysis.
| Use case | Maqsad | Sinf |
|---|---|---|
| Preview | Kameradan real vaqtda tasvirni ko'rsatish | PreviewView |
| ImageCapture | Flash va rezolyutsiya sozlamalari bilan suratga olish | ImageCapture |
| ImageAnalysis | ML qayta ishlash uchun har bir kadrni tahlil qilish | ImageAnalysis |
| VideoCapture | Mikrofon bilan video yozish (1.1.0-beta dan) | VideoCapture |
Preview use case kameradan video oqimini PreviewView'da ko'rsatadi — CameraX kutubxonasidan maxsus View. PreviewView avtomatik ravishda kamera nisbatiga moslashadi, ScaleType (FillCenter, FitCenter) va use case'ni qayta yaratmasdan ekran aylantirishni qo'llab-quvvatlaydi. Dasturchi faqat Preview'ni ProcessCameraProvider orqali Lifecycle'ga bog'lashi kerak.
ImageAnalysis use case kameradan har bir kadrni tahlil uchun ishlovchiga uzatadi: matnni tanib olish, yuzlarni aniqlash, QR kodlarni skanerlash. Analizator kadrlarni YUV_420_888 formatida oladi — Android universal rang fazosi. Ish rejimi (BLOCKING yoki NON_BLOCKING) kadrlar navbatini boshqaradi: BLOCKING oldingi tahlil tugashini kutadi, NON_BLOCKING kechikishda kadrlarni o'tkazib yuboradi.
ImageCapture use case flash, rezolyutsiya va siqish sozlamalari bilan kameradan suratlar oladi. JPEG va RAW formatlari qo'llab-quvvatlanadi (mos qurilmalarda). ImageCapture suratni asinxron ravishda OnImageCapturedCallback orqali yoki to'g'ridan-to'g'ri faylga ImageCapture.OutputFileOptions bilan saqlaydi.
VideoCapture use case CameraX 1.1.0 (beta) da qo'shilgan va 30 FPS da 4K gacha rezolyutsiyada video yozish imkonini beradi. Use case avtomatik ravishda Preview bilan sinxronlanadi: vizordagi tasvir faylga yozilayotgan narsaga mos keladi. VideoCapture ichki MediaCodec va MediaMuxer dan foydalanadi, video kodek va MP4 konteyner sozlamalarining murakkabligini yashiradi.
CameraX va Camera2 — Android'da kamera bilan ishlashning ikki yondashuvi. Camera2 — past darajali API, qurilma ustidan to'liq nazorat beradi. CameraX — yuqori darajali abstraksiya, odatiy stsenariylarni avtomatlashtiradi. Ularning o'rtasidagi tanlov loyiha talablariga bog'liq.
| Xususiyat | CameraX | Camera2 |
|---|---|---|
| API darajasi | Yuqori (use case) | Past (to'liq nazorat) |
| Qurilma-spesifik kod | Talab qilinmaydi | Har bir qurilma uchun talab qilinadi |
| Lifecycle ga bog'lash | Avtomatik | Qo'lda |
| Kengaytmalar | O'rnatilgan (HDR, Portrait, Night) | OEM implementatsiyasini talab qiladi |
| Joriy qilish murakkabligi | 15–30 qator kod | 100–300 qator kod |
| API qo'llab-quvvatlash | API 21+ | API 21+ |
| Moslashuvchanlik | Standart stsenariylar | Istagan stsenariylar |
Standart vazifalar uchun CameraX dan foydalaning: ilovada kamera, QR skaner, ML oqimini qayta ishlash. Camera2 dan qo'lda ekspozitsiyani boshqarish, parametrlar ustidan to'liq nazorat bilan RAW suratga olish, bir vaqtning o'zida bir nechta kameralar bilan ishlash talab qilinganda foydalaning.
CameraX ning Android ilovasida uchta asosiy use case bilan to'liq konfiguratsiyasini ko'rib chiqamiz: Preview, ImageCapture va ImageAnalysis.
Kod CameraX ni ProcessCameraProvider orqali Activity Lifecycle'iga bog'laydi. Avval provider nusxasi so'raladi, keyin use case'lar yaratiladi va bog'lash amalga oshiriladi.
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview yaratish
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture yaratish
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Lifecycle ga bog'lash
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin kodi ProcessCameraProvider ni future orqali oladi, Preview va ImageCapture use case'larini yaratadi va ularni joriy Activity ning Lifecycle'iga bog'laydi. CameraX avtomatik ravishda ekran aylantirish, kameralarni almashish va Activity yopilganda resurslarni bo'shatishni boshqaradi.
Kameradan kadrma-kadr qayta ishlash uchun ImageAnalysis use case qo'shamiz, masalan ML Kit bilan integratsiya uchun.
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// YUV ni ML Kit uchun Bitmap ga aylantirish
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit matnni tanib olishni ishga tushirish
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// Natijani qayta ishlash
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST strategiyasi bilan ImageAnalysis faqat oxirgi mavjud kadrni qayta ishlaydi, analizator yetishmasa eskilarni o'tkazib yuboradi. Har bir kadr ML Kit uchun YUV dan Bitmap ga aylantiriladi, so'ngra matnni tanib olish ishga tushiriladi. imageProxy.close() chaqiruvi majburiy — aks holda CameraX yangi kadrlarni yetkazib berishni to'xtatadi.
CameraX Extensions — ilg'or suratga olish rejimlarini qo'shuvchi modul: portret (fonni xiralashtirish), HDR (kengaytirilgan dinamik diapazon), tungi rejim (kam yorug'likda suratga olish), avtoretush (terini tuzatish) va "go'zal yuz" (beauty) rejimi. Kengaytmalar faqat kamera ishlab chiqaruvchisi OEM implementatsiyasini taqdim etgan qurilmalarda faollashadi.
CameraX Extensions dan foydalanishdan oldin kengaytma joriy qurilmada mavjudligini tekshirish kerak. Google ExtensionsManager.isExtensionAvailable orqali tekshirishni tavsiya qiladi.
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// Portret rejimini yoqish
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
Kod ExtensionsManager orqali BOKEH (portret) kengaytmasining qo'llab-quvvatlanishini tekshiradi va OEM implementatsiyasi mavjud bo'lsa uni yoqadi. CameraX avtomatik ravishda kamera sozlamalarini portret rejimiga o'tkazadi. Agar kengaytma mavjud bo'lmasa, ilova standart rejimda ishlashni davom ettiradi.
CameraX Extensions Android rivojlanishining asosiy muammolaridan birini hal qiladi: kameralarning fragmentatsiyasi. Turli qurilmalarda portret rejimi turlicha amalga oshiriladi — ba'zilari ikkita linza, boshqalari dasturiy xiralashtirishdan foydalanadi. CameraX bu farqni abstraksiya qiladi: dasturchi BOKEH rejimini yoqadi, kutubxona esa uni aniq qurilmada qanday amalga oshirishni o'zi belgilaydi. Google tasdiqlangan OEM sheriklar ro'yxatini yuritadi: Samsung, Xiaomi, OPPO, vivo, Google Pixel.
CameraX bilan ishlashda bir vaqtning o'zida use case'lar soni cheklovlarini hisobga olish muhim: ko'pchilik qurilmalarda maksimal 3 ta use case bir vaqtda ishga tushirilishi mumkin. Masalan, Preview + ImageCapture + ImageAnalysis barcha zamonaviy qurilmalarda ishlaydi, lekin Preview + ImageCapture + VideoCapture byudjet modellarida qo'llab-quvvatlanmasligi mumkin. CameraX bog'lashdan oldin use case kombinatsiyasining mosligini tekshiruvchi ProcessCameraProvider.checkAvailability() metodini taqdim etadi, bu esa runtime'da crash'larning oldini olishga imkon beradi.
CameraX Jetpack Navigation bilan CameraXFragment yoki Compose-mos PreviewView orqali integratsiyalanadi. Compose uchun PreviewView o'rnatilgan AndroidView elementi ishlatiladi. CameraX ekran aylantirish va konfiguratsiya o'zgarishini kamera sessiyasi holatini yo'qotmasdan to'g'ri boshqaradi — faqat LifecycleOwner ko'rsatish kifoya va kutubxona qurilma aylantirilganda use case bog'lanishlarini avtomatik qayta yaratadi.
CameraX ni haqiqiy qurilmasiz sinash uchun Google TestableCameraX ni taqdim etadi — unit testlarda kamera harakatini emulyatsiya qiluvchi kutubxona. TestableCameraX kamera kadrlarini simulyatsiya qilish, ImageAnalysis ishini va ImageCapture qayta ishlashning to'g'riligini fizik qurilmasiz tekshirish imkonini beradi. Bu kamera bilan ishlaydigan loyihalar uchun CI/CD pipeline'ni sezilarli darajada tezlashtiradi.
Ko'p beriladigan savollar
Android 5.0 (API 21) va undan yuqori. CameraX faol Android qurilmalarining 99% ini qamrab oladi. Kengaytmalar (Portrait, HDR) uchun API 23+ va aniq rejimning OEM qo'llab-quvvatlashi talab qilinadi.
Ha, ImageAnalysis use case har bir kadrni analizatorga uzatadi. Kadrlar ML Kit uchun YUV_420_888 dan InputImage ga aylantiriladi. Bu ML skaner yaratish uchun standart naqshdir.
CameraX — use case arxitekturasi, avtomatik Lifecycle bog'lash va qurilma-spesifik farqlarni boshqarish bilan yuqori darajali API. Camera2 — ko'p boilerplate kod bilan kamera ustidan past darajali to'liq nazorat.
Ha, VideoCapture use case CameraX 1.1.0-beta da qo'shilgan. Mikrofon bilan video yozadi va Preview bilan sinxronlanadi. Murakkabroq stsenariylar uchun to'g'ridan-to'g'ri Camera2 dan foydalaning.
CameraSelector orqali: DEFAULT_BACK_CAMERA yoki DEFAULT_FRONT_CAMERA. Almashish uchun cameraProvider.bindToLifecycle() ni yangi selektor bilan chaqiring — CameraX avtomatik ravishda sessiyani qayta ishga tushiradi.
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.