CameraX: bu nima, CameraX API va kamera qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-26 O'qish vaqti: 8 daq

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 kamerasi uchun use case API bilan Jetpack kutubxonasi: Preview, ImageCapture va ImageAnalysis
  • Use case arxitekturasi dasturchini qo'lda sessiya va kamera holatlarini boshqarishdan ozod qiladi
  • CameraX Extensions qo'llab-quvvatlovchi qurilmalarda portret rejimi, HDR va tungi suratga olishni qo'shadi
  • Tip xavfsizligi — CameraX moslikni ProcessCameraProvider orqali tekshiradi
  • Moslik Android 5.0 (API 21) dan boshlab 99% Android qurilmalari bilan

CameraX nima?

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.

Asosiy imkoniyatlar

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 use case'lari

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 caseMaqsadSinf
PreviewKameradan real vaqtda tasvirni ko'rsatishPreviewView
ImageCaptureFlash va rezolyutsiya sozlamalari bilan suratga olishImageCapture
ImageAnalysisML qayta ishlash uchun har bir kadrni tahlil qilishImageAnalysis
VideoCaptureMikrofon bilan video yozish (1.1.0-beta dan)VideoCapture

Preview

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

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

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 — video yozish

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 vs Camera2

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.

XususiyatCameraXCamera2
API darajasiYuqori (use case)Past (to'liq nazorat)
Qurilma-spesifik kodTalab qilinmaydiHar bir qurilma uchun talab qilinadi
Lifecycle ga bog'lashAvtomatikQo'lda
KengaytmalarO'rnatilgan (HDR, Portrait, Night)OEM implementatsiyasini talab qiladi
Joriy qilish murakkabligi15–30 qator kod100–300 qator kod
API qo'llab-quvvatlashAPI 21+API 21+
MoslashuvchanlikStandart stsenariylarIstagan 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.

Kotlin'da kod misollari

CameraX ning Android ilovasida uchta asosiy use case bilan to'liq konfiguratsiyasini ko'rib chiqamiz: Preview, ImageCapture va ImageAnalysis.

ProcessCameraProvider sozlamasi

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.

kotlin
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.

ML qayta ishlash uchun ImageAnalysis

Kameradan kadrma-kadr qayta ishlash uchun ImageAnalysis use case qo'shamiz, masalan ML Kit bilan integratsiya uchun.

kotlin
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

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.

Kengaytmalarni tekshirish va yoqish

CameraX Extensions dan foydalanishdan oldin kengaytma joriy qurilmada mavjudligini tekshirish kerak. Google ExtensionsManager.isExtensionAvailable orqali tekshirishni tavsiya qiladi.

kotlin
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

CameraX Android ning qaysi versiyalaridan ishlaydi?

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.

CameraX ni ML Kit bilan ishlatish mumkinmi?

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 Camera2 dan nimasi bilan farq qiladi?

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.

CameraX video yozishni qo'llab-quvvatlaydimi?

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.

Old va orqa kamera o'rtasida qanday almashish mumkin?

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

  • CameraX — use case arxitekturasi bilan Android kamerasi uchun Jetpack kutubxonasi (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use case'lar bir sessiyada birlashtiriladi: ML uchun Preview + ImageAnalysis yoki suratlar uchun Preview + ImageCapture
  • Lifecycle ga bog'lash ekran aylantirish va Activity holatlari o'zgarishida kamera resurslarini avtomatik boshqaradi
  • CameraX Extensions mos qurilmalarda portret rejimi, HDR va tungi suratga olishni qo'shadi
  • Moslik API 21 dan boshlab qurilma-spesifik kodsiz 99% Android qurilmalari bilan
  • ML Kit bilan integratsiya ImageAnalysis orqali har bir kadrni real vaqtda tahlil qilish imkonini beradi
  • Standart vazifalar uchun CameraX optimal tanlov, to'liq nazorat uchun Camera2 dan foydalaning

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.

Loyihani muhokama qilish

Shuningdek o'qing