CameraX — knihovna Android Jetpack pro práci s kamerou, která poskytuje jednoduché a konzistentní API nad složitým Camera2. Abstrahuje rozdíly mezi stovkami modelů Android zařízení a zaručuje stejné chování kamery na různých přístrojích. Podle Android Developer CameraX Guide (2026) je knihovna používána ve 25 000+ aplikacích Google Play a funguje na zařízeních s API Level 21 a vyšším.
Hlavní body
CameraX — je knihovna ze sady Android Jetpack, poprvé vydaná Googlem v roce 2019 jako náhrada za zastaralé Camera API a zjednodušená alternativa ke složitému Camera2. Hlavní filozofií CameraX je „napiš jednou, funguje na všech zařízeních". Knihovna automaticky zpracovává hardwarové rozdíly: umístění kamer, podporovaná rozlišení, orientaci senzoru a dostupné formáty — vývojář nemusí psát kód specifický pro zařízení.
Architektura CameraX je postavena na use cases: Preview (zobrazení obrazu z kamery ve Viewfinderu), ImageCapture (focení), ImageAnalysis (analýza toku snímků pro ML) a VideoCapture (nahrávání videa). Každý use case je nezávislá komponenta, kterou lze kombinovat: současně spustit Preview pro hledáček a ImageAnalysis pro ML zpracování. Podle Google (2026) je CameraX podporován na 99% Android zařízení s API 21+.
CameraX poskytuje automatické přepínání mezi přední a zadní kamerou, podporu otáčení obrazovky bez obnovení relace, vestavěné zpracování životního cyklu přes LifecycleOwner, vázání use cases na jeden proces Lifecycle, podporu Camera2 Extensions pro portrét, HDR a noční režim, a také TestableCameraX pro unit testování bez reálného zařízení.
CameraX definuje čtyři standardní use case, z nichž každý řeší konkrétní úkol práce s kamerou. Use cases lze kombinovat: nejoblíbenější kombinace jsou Preview + ImageCapture pro kameru a Preview + ImageAnalysis pro ML skener.
| Use case | Účel | Třída |
|---|---|---|
| Preview | Zobrazení obrazu kamery v reálném čase | PreviewView |
| ImageCapture | Focení s nastavením blesku a rozlišení | ImageCapture |
| ImageAnalysis | Analýza každého snímku pro ML zpracování | ImageAnalysis |
| VideoCapture | Nahrávání videa s mikrofonem (od 1.1.0-beta) | VideoCapture |
Preview use case zobrazuje video stream z kamery v PreviewView — speciálním View z knihovny CameraX. PreviewView se automaticky přizpůsobí poměru stran kamery, podporuje ScaleType (FillCenter, FitCenter) a otáčení obrazovky bez obnovení use case. Vývojář musí pouze připojit Preview k Lifecycle přes ProcessCameraProvider.
ImageAnalysis use case předává každý snímek z kamery handleru k analýze: rozpoznávání textu, detekce obličejů, skenování QR kódů. Analyzátor přijímá snímky ve formátu YUV_420_888 — univerzálním barevném prostoru Android. Režim práce (BLOCKING nebo NON_BLOCKING) spravuje frontu snímků: BLOCKING čeká na dokončení předchozí analýzy, NON_BLOCKING přeskočí snímky při zpoždění.
ImageCapture use case fotí z kamery s nastavením blesku, rozlišení a komprese. Podporovány jsou formáty JPEG a RAW (na kompatibilních zařízeních). ImageCapture ukládá snímek asynchronně přes OnImageCapturedCallback nebo přímo do souboru přes ImageCapture.OutputFileOptions.
VideoCapture use case byl přidán v CameraX 1.1.0 (beta) a umožňuje nahrávat video v rozlišení až 4K při 30 FPS. Use case se automaticky synchronizuje s Preview: obraz v hledáčku odpovídá tomu, co se nahrává do souboru. VideoCapture interně používá MediaCodec a MediaMuxer, čímž skrývá složitost konfigurace video kodeku a MP4 kontejneru.
CameraX a Camera2 — dva přístupy k práci s kamerou v Androidu. Camera2 — nízkoúrovňové API, poskytující plnou kontrolu nad zařízením. CameraX — vysokoúrovňová abstrakce, automatizující typické scénáře. Volba mezi nimi závisí na požadavcích projektu.
| Vlastnost | CameraX | Camera2 |
|---|---|---|
| Úroveň API | Vysoká (use case) | Nízká (plná kontrola) |
| Kód specifický pro zařízení | Není vyžadován | Vyžadován pro každé zařízení |
| Vázání na Lifecycle | Automatické | Ruční |
| Rozšíření | Vestavěná (HDR, Portrait, Night) | Vyžadují OEM implementaci |
| Složitost implementace | 15–30 řádků kódu | 100–300 řádků kódu |
| Podpora API | API 21+ | API 21+ |
| Flexibilita | Standardní scénáře | Jakékoli scénáře |
Používejte CameraX pro standardní úkoly: kamera v aplikaci, QR skener, ML zpracování toku. Používejte Camera2, když je vyžadováno ruční ovládání expozice, RAW focení s plnou kontrolou parametrů, práce s více kamerami současně.
Podívejme se na plnou konfiguraci CameraX v Android aplikaci s použitím všech tří hlavních use cases: Preview, ImageCapture a ImageAnalysis.
Kód váže CameraX k Lifecycle Activity přes ProcessCameraProvider. Nejprve je vyžádána instance providera, poté jsou vytvořeny use cases a provedeno vázání.
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Vytvoření Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// Vytvoření ImageCapture
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Připojení k Lifecycle
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin kód získává ProcessCameraProvider přes future, vytváří use cases Preview a ImageCapture a váže je k Lifecycle aktuální Activity. CameraX automaticky zpracovává otáčení obrazovky, přepínání kamer a uvolňování zdrojů při zavření Activity.
Přidáme ImageAnalysis use case pro zpracování toku z kamery snímek po snímku, například pro integraci s ML Kitem.
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// Konverze YUV na Bitmap pro ML Kit
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// Spuštění rozpoznávání textu ML Kit
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// Zpracování výsledku
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
ImageAnalysis se strategií KEEP_ONLY_LATEST zpracovává pouze poslední dostupný snímek a přeskočí zastaralé, pokud analyzátor nestíhá. Každý snímek je konvertován z YUV do Bitmap pro ML Kit, poté je spuštěno rozpoznávání textu. Volání imageProxy.close() je povinné — jinak CameraX přestane dodávat nové snímky.
CameraX Extensions — modul přidávající pokročilé režimy focení: portrét (rozmazání pozadí), HDR (rozšířený dynamický rozsah), noční režim (focení při slabém osvětlení), automatický retuš (korekce pleti) a režim „krásná tvář" (beauty). Rozšíření se aktivují pouze na zařízeních, kde výrobce kamery poskytl OEM implementaci.
Před použitím CameraX Extensions je třeba zkontrolovat, zda je rozšíření na aktuálním zařízení dostupné. Google doporučuje kontrolu přes ExtensionsManager.isExtensionAvailable.
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// Zapnutí portrétového režimu
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
Kód kontroluje podporu rozšíření BOKEH (portrétového) přes ExtensionsManager a zapíná jej, pokud je k dispozici OEM implementace. CameraX automaticky přepne nastavení kamery pro portrétový režim. Pokud rozšíření není dostupné, aplikace pokračuje v práci ve standardním režimu bez pádů.
CameraX Extensions řeší jeden z hlavních problémů vývoje pro Android: fragmentaci kamer. Na různých zařízeních je portrétový režim implementován odlišně — některá používají dva objektivy, jiná — softwarové rozmazání. CameraX tuto odlišnost abstrahuje: vývojář zapne BOKEH režim a knihovna sama určí, jak jej implementovat na konkrétním zařízení. Google udržuje seznam ověřených OEM partnerů: Samsung, Xiaomi, OPPO, vivo, Google Pixel.
Při práci s CameraX je důležité zohlednit omezení počtu současných use cases: na většině zařízení lze současně spustit maximálně 3 use cases. Například Preview + ImageCapture + ImageAnalysis fungují na všech moderních zařízeních, ale Preview + ImageCapture + VideoCapture nemusí být podporovány na levných modelech. CameraX poskytuje metodu ProcessCameraProvider.checkAvailability(), která kontroluje kompatibilitu kombinace use cases před vázáním, což umožňuje vyhnout se pádům za běhu.
CameraX se integruje s Jetpack Navigation přes CameraXFragment nebo Compose-kompatibilní PreviewView. Pro Compose se používá prvek AndroidView, do kterého je vložen PreviewView. CameraX správně zpracovává otáčení obrazovky a změnu konfigurace bez ztráty stavu relace kamery — stačí uvést LifecycleOwner a knihovna automaticky obnoví vázání use cases při otočení zařízení.
Pro testování CameraX bez reálného zařízení Google poskytuje TestableCameraX — knihovnu emulující chování kamery v unit testech. TestableCameraX umožňuje simulovat snímky z kamery, kontrolovat práci ImageAnalysis a správnost zpracování ImageCapture bez fyzického zařízení. To výrazně urychluje CI/CD pipeline pro projekty pracující s kamerou.
Často kladené otázky
Android 5.0 (API 21) a vyšší. CameraX pokrývá 99% aktivních Android zařízení. Pro rozšíření (Portrait, HDR) je vyžadován API 23+ a OEM podpora konkrétního režimu.
Ano, ImageAnalysis use case předává každý snímek analyzátoru. Snímky jsou konvertovány z YUV_420_888 do InputImage pro ML Kit. To je standardní vzor pro vytvoření ML skeneru.
CameraX — vysokoúrovňové API s use case architekturou, automatickým vázáním na Lifecycle a zpracováním rozdílů specifických pro zařízení. Camera2 — nízkoúrovňová plná kontrola nad kamerou s velkým množstvím boilerplate kódu.
Ano, VideoCapture use case byl přidán v CameraX 1.1.0-beta. Nahrává video s mikrofonem a synchronizuje se s Preview. Pro složitější scénáře použijte přímo Camera2.
Přes CameraSelector: DEFAULT_BACK_CAMERA nebo DEFAULT_FRONT_CAMERA. Pro přepnutí zavolejte cameraProvider.bindToLifecycle() s novým selektorem — CameraX automaticky restartuje relaci.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také