CameraX — mürəkkəb Camera2 üzərində sadə və ardıcıl API təmin edən Android Jetpack kamera kitabxanasıdır. Yüzlərlə Android cihaz modeli arasındakı fərqləri abstraksiya edir və müxtəlif cihazlarda kameranın eyni davranışını təmin edir. Android Developer CameraX Guide (2026) məlumatına görə, kitabxana Google Play-də 25 000+ tətbiqdə istifadə olunur və API Level 21 və yuxarı olan cihazlarda işləyir.
Əsas məqamlar
CameraX — Android Jetpack tərkibinə daxil olan, ilk dəfə Google tərəfindən 2019-cu ildə köhnəlmiş Camera API-ni əvəz etmək və mürəkkəb Camera2-yə sadələşdirilmiş alternativ olaraq buraxılmış kitabxanadır. CameraX-in əsas fəlsəfəsi — «bir dəfə yaz, bütün cihazlarda işləsin». Kitabxana avtomatik olaraq aparat fərqlərini idarə edir: kameraların yerləşməsi, dəstəklənən rezolyusiyalar, sensor oriyentasiyası və mövcud formatlar — tərtibatçı cihaz-spesifik kod yazmalı deyil.
CameraX arxitekturası use case-lərə əsaslanır: Preview (kameradan təsvirin Viewfinder-də göstərilməsi), ImageCapture (şəkil çəkmə), ImageAnalysis (ML üçün kadr axınının analizi) və VideoCapture (video yazma). Hər bir use case müstəqil komponentdir və birləşdirilə bilər: eyni anda Preview vizor üçün və ImageAnalysis ML emalı üçün işə salına bilər. Google (2026) məlumatına görə, CameraX API 21+ olan 99% Android cihazında dəstəklənir.
CameraX ön və arxa kameralar arasında avtomatik keçid, sessiyanı yenidən yaratmadan ekranın döndərilməsi dəstəyi, LifecycleOwner vasitəsilə daxili həyat dövrü idarəsi, use case-lərin bir Lifecycle prosesinə bağlanması, portret, HDR və gecə rejimi üçün Camera2 Extensions dəstəyi, həmçinin real cihaz olmadan unit-test üçün TestableCameraX təmin edir.
CameraX dörd standart use case müəyyən edir, hər biri kamera ilə işin konkret tapşırığını həll edir. Use case-lər birləşdirilə bilər: ən populyar birləşmələr kamera üçün Preview + ImageCapture və ML skaner üçün Preview + ImageAnalysis-dir.
| Use case | Təyinat | Sinif |
|---|---|---|
| Preview | Kameradan real vaxtda təsvirin göstərilməsi | PreviewView |
| ImageCapture | Flash və rezolyusiya parametrləri ilə şəkil çəkmə | ImageCapture |
| ImageAnalysis | ML emalı üçün hər kadrın analizi | ImageAnalysis |
| VideoCapture | Mikrofonla video yazma (1.1.0-beta-dan) | VideoCapture |
Preview use case kameradan video axınını PreviewView-də göstərir — CameraX kitabxanasından xüsusi View. PreviewView avtomatik olaraq kamera nisbətinə uyğunlaşır, ScaleType (FillCenter, FitCenter) dəstəkləyir və use case-i yenidən yaratmadan ekranın döndərilməsini idarə edir. Tərtibatçı yalnız Preview-i ProcessCameraProvider vasitəsilə Lifecycle-ə bağlamalıdır.
ImageAnalysis use case kameradan hər kadrı analiz üçün emalçıya ötürür: mətn tanıma, üz aşkarlama, QR kod skan etmə. Analizator kadrları YUV_420_888 formatında alır — Android-in universal rəng məkanı. İş rejimi (BLOCKING və ya NON_BLOCKING) kadr növbəsini idarə edir: BLOCKING əvvəlki analizin bitməsini gözləyir, NON_BLOCKING gecikmə zamanı kadrları buraxır.
ImageCapture use case flash, rezolyusiya və sıxılma parametrləri ilə kameradan şəkillər çəkir. JPEG və RAW formatları dəstəklənir (uyğun cihazlarda). ImageCapture şəkli asinxron olaraq OnImageCapturedCallback vasitəsilə və ya birbaşa fayla ImageCapture.OutputFileOptions ilə yadda saxlayır.
VideoCapture use case CameraX 1.1.0 (beta) əlavə edilmişdir və 30 FPS-də 4K-a qədər rezolyusiyada video yazmağa imkan verir. Use case avtomatik olaraq Preview ilə sinxronlaşır: vizordakı təsvir fayla yazılanla uyğun gəlir. VideoCapture daxildə MediaCodec və MediaMuxer istifadə edir, video kodek və MP4 konteyner konfiqurasiyasının mürəkkəbliyini gizlədir.
CameraX və Camera2 — Android-də kamera ilə işin iki yanaşması. Camera2 — aşağı səviyyəli API, cihaz üzərində tam nəzarət verir. CameraX — yüksək səviyyəli abstraksiya, tipik ssenariləri avtomatlaşdırır. Onlar arasında seçim layihənin tələblərindən asılıdır.
| Xüsusiyyət | CameraX | Camera2 |
|---|---|---|
| API səviyyəsi | Yüksək (use case) | Aşağı (tam nəzarət) |
| Cihaz-spesifik kod | Tələb olunmur | Hər cihaz üçün tələb olunur |
| Lifecycle-ə bağlama | Avtomatik | Əl ilə |
| Genişlənmələr | Daxili (HDR, Portrait, Night) | OEM tətbiqi tələb edir |
| Tətbiq mürəkkəbliyi | 15–30 sətir kod | 100–300 sətir kod |
| API dəstəyi | API 21+ | API 21+ |
| Çeviklik | Standart ssenarilər | İstənilən ssenarilər |
CameraX standart tapşırıqlar üçün istifadə edin: tətbiqdə kamera, QR skaner, ML axını emalı. Camera2 əl ilə ekspozisiya idarəsi, parametrlərə tam nəzarət ilə RAW çəkiliş, eyni anda bir neçə kamera ilə iş tələb olunduqda istifadə edin.
CameraX-in Android tətbiqində hər üç əsas use case ilə tam konfiqurasiyasını nəzərdən keçirək: Preview, ImageCapture və ImageAnalysis.
Kod CameraX-i ProcessCameraProvider vasitəsilə Activity Lifecycle-ə bağlayır. Əvvəlcə provider nümunəsi tələb olunur, sonra use case-lər yaradılır və bağlama yerinə yetirilir.
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview yaradılması
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture yaradılması
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Lifecycle-ə bağlama
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin kodu ProcessCameraProvider-i future vasitəsilə alır, Preview və ImageCapture use case-lərini yaradır və onları cari Activity-nin Lifecycle-ə bağlayır. CameraX avtomatik olaraq ekran döndərilməsini, kamera keçidlərini və Activity bağlandıqda resursların sərbəst buraxılmasını idarə edir.
Kameradan kadr-kadr emalı üçün ImageAnalysis use case əlavə edək, məsələn ML Kit ilə inteqrasiya üçün.
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// ML Kit üçün YUV-nin Bitmap-ə çevrilməsi
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit mətn tanımanın işə salınması
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// Nəticənin emalı
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST strategiyası ilə ImageAnalysis yalnız son mövcud kadrı emal edir, analizator çatmadıqda köhnələri buraxır. Hər kadr ML Kit üçün YUV-dan Bitmap-ə çevrilir, sonra mətn tanıma işə salınır. imageProxy.close() çağırışı məcburidir — əks halda CameraX yeni kadrlar təqdim etməyi dayandırar.
CameraX Extensions — qabaqcıl çəkiliş rejimləri əlavə edən modul: portret (fon bulanıqlığı), HDR (geniş dinamik diapazon), gecə rejimi (az işıqda çəkiliş), avtoretuş (dəri korreksiyası) və «gözəl üz» (beauty) rejimi. Genişlənmələr yalnız kamera istehsalçısının OEM tətbiqi təmin etdiyi cihazlarda aktivləşir.
CameraX Extensions istifadə etməzdən əvvəl genişlənmənin cari cihazda mövcud olub-olmadığını yoxlamaq lazımdır. Google ExtensionsManager.isExtensionAvailable vasitəsilə yoxlamağı tövsiyə edir.
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// Portret rejiminin aktivləşdirilməsi
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
Kod ExtensionsManager vasitəsilə BOKEH (portret) genişlənməsinin dəstəyini yoxlayır və OEM tətbiqi mövcud olduqda onu aktivləşdirir. CameraX avtomatik olaraq kamera parametrlərini portret rejiminə keçirir. Genişlənmə mövcud deyilsə, tətbiq standart rejimdə işləməyə davam edir.
CameraX Extensions Android inkişafının əsas problemlərindən birini həll edir: kameraların fraqmentasiyası. Müxtəlif cihazlarda portret rejimi fərqli həyata keçirilir — bəziləri iki lens, digərləri proqram bulanıqlığı istifadə edir. CameraX bu fərqi abstraksiya edir: tərtibatçı BOKEH rejimini aktivləşdirir, kitabxana isə onu konkret cihazda necə tətbiq edəcəyini özü müəyyən edir. Google təsdiqlənmiş OEM tərəfdaşlarının siyahısını saxlayır: Samsung, Xiaomi, OPPO, vivo, Google Pixel.
CameraX ilə işləyərkən eyni vaxtda use case-lərin sayı ilə bağlı məhdudiyyətləri nəzərə almaq vacibdir: əksər cihazlarda maksimum 3 use case eyni anda işə salına bilər. Məsələn, Preview + ImageCapture + ImageAnalysis bütün müasir cihazlarda işləyir, lakin Preview + ImageCapture + VideoCapture büdcə modellərində dəstəklənməyə bilər. CameraX bağlamadan əvvəl use case kombinasiyasının uyğunluğunu yoxlayan ProcessCameraProvider.checkAvailability() metodunu təqdim edir ki, bu da runtime-da crash-lərin qarşısını almağa imkan verir.
CameraX Jetpack Navigation ilə CameraXFragment və ya Compose-uyğun PreviewView vasitəsilə inteqrasiya olunur. Compose üçün PreviewView-in yerləşdirildiyi AndroidView elementi istifadə olunur. CameraX ekran döndərilməsini və konfiqurasiya dəyişikliyini kamera sessiyasının vəziyyətini itirmədən düzgün idarə edir — sadəcə LifecycleOwner göstərmək kifayətdir və kitabxana cihaz döndərildikdə use case bağlamalarını avtomatik yenidən yaradır.
CameraX-i real cihaz olmadan sınamaq üçün Google TestableCameraX təqdim edir — unit-testlərdə kamera davranışını emulə edən kitabxana. TestableCameraX kamera kadrlarını simulyasiya etməyə, ImageAnalysis işini və ImageCapture emalının düzgünlüyünü fiziki cihaz olmadan yoxlamağa imkan verir. Bu, kamera ilə işləyən layihələr üçün CI/CD pipeline-nı əhəmiyyətli dərəcədə sürətləndirir.
Tez-tez verilən suallar
Android 5.0 (API 21) və yuxarı. CameraX aktiv Android cihazlarının 99%-ni əhatə edir. Genişlənmələr (Portrait, HDR) üçün API 23+ və konkret rejimin OEM dəstəyi tələb olunur.
Bəli, ImageAnalysis use case hər kadrı analizatora ötürür. Kadrlar ML Kit üçün YUV_420_888-dən InputImage-ə çevrilir. Bu ML skaner yaratmaq üçün standart nümunədir.
CameraX — use case arxitekturası, avtomatik Lifecycle bağlaması və cihaz-spesifik fərqlərin idarəsi ilə yüksək səviyyəli API. Camera2 — çoxlu boilerplate kod ilə kamera üzərində aşağı səviyyəli tam nəzarət.
Bəli, VideoCapture use case CameraX 1.1.0-beta-da əlavə edilmişdir. Mikrofonla video yazır və Preview ilə sinxronlaşır. Daha mürəkkəb ssenarilər üçün birbaşa Camera2 istifadə edin.
CameraSelector vasitəsilə: DEFAULT_BACK_CAMERA və ya DEFAULT_FRONT_CAMERA. Keçid üçün cameraProvider.bindToLifecycle() yeni seçici ilə çağırın — CameraX avtomatik olaraq sessiyanı yenidən başladacaq.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun