CameraX ist eine Android-Jetpack-Bibliothek für die Arbeit mit der Kamera, die eine einfache und konsistente API auf der komplexen Camera2 bereitstellt. Sie abstrahiert die Unterschiede zwischen Hunderten von Android-Gerätemodellen und gewährleistet ein einheitliches Kameraverhalten auf verschiedenen Geräten. Laut dem Android Developer CameraX Guide (2026) wird die Bibliothek in über 25.000 Google-Play-Apps verwendet und funktioniert auf Geräten mit API Level 21 und höher.
Wichtigste Erkenntnisse
CameraX ist eine Bibliothek aus der Android-Jetpack-Suite, die erstmals 2019 von Google als Ersatz für die veraltete Camera-API und als vereinfachte Alternative zur komplexen Camera2 veröffentlicht wurde. Die Kernphilosophie von CameraX lautet „einmal schreiben, auf allen Geräten ausführen“. Die Bibliothek behandelt automatisch Hardware-Unterschiede: Kameraposition, unterstützte Auflösungen, Sensorausrichtung und verfügbare Formate — der Entwickler muss keinen gerätespezifischen Code schreiben.
Die CameraX-Architektur basiert auf Anwendungsfällen: Preview (Kamerabild im Viewfinder anzeigen), ImageCapture (Fotos aufnehmen), ImageAnalysis (Frame-Stream für ML analysieren) und VideoCapture (Video aufnehmen). Jeder Anwendungsfall ist eine unabhängige Komponente, die kombiniert werden kann: Preview für den Sucher und ImageAnalysis für die ML-Verarbeitung gleichzeitig ausführen. Laut Google (2026) wird CameraX auf 99 % der Android-Geräte mit API 21+ unterstützt.
CameraX bietet automatisches Umschalten zwischen Front- und Rückkamera, Unterstützung für Bildschirmdrehung ohne Neuerstellung der Sitzung, integrierte Lebenszyklusverwaltung über LifecycleOwner, Bindung von Anwendungsfällen an einen einzigen Lifecycle-Prozess, Unterstützung für Camera2 Extensions für Porträt, HDR und Nachtmodus sowie TestableCameraX für Komponententests ohne echtes Gerät.
CameraX definiert vier Standard-Anwendungsfälle, die jeweils eine bestimmte Kameraufgabe lösen. Die Anwendungsfälle können kombiniert werden: Die beliebtesten Kombinationen sind Preview + ImageCapture für eine Kamera-App und Preview + ImageAnalysis für einen ML-Scanner.
| Anwendungsfall | Zweck | Klasse |
|---|---|---|
| Preview | Echtzeit-Kamerabild anzeigen | PreviewView |
| ImageCapture | Fotos mit Blitz- und Auflösungseinstellungen aufnehmen | ImageCapture |
| ImageAnalysis | Jeden Frame für die ML-Verarbeitung analysieren | ImageAnalysis |
| VideoCapture | Video mit Mikrofon aufnehmen (seit 1.1.0-beta) | VideoCapture |
Der Preview-Anwendungsfall zeigt den Kameravideostream in PreviewView an — einer speziellen View aus der CameraX-Bibliothek. PreviewView passt sich automatisch an das Seitenverhältnis der Kamera an, unterstützt ScaleType (FillCenter, FitCenter) und Bildschirmdrehung ohne Neuerstellung des Anwendungsfalls. Der Entwickler muss Preview nur über ProcessCameraProvider an einen Lifecycle binden.
Der ImageAnalysis-Anwendungsfall sendet jeden Kameraframe zur Analyse an einen Handler: Texterkennung, Gesichtserkennung, QR-Code-Scannen. Der Analysator empfängt Frames im YUV_420_888-Format — dem universellen Android-Farbraum. Betriebsmodus (BLOCKING oder NON_BLOCKING) steuert die Frame-Warteschlange: BLOCKING wartet auf den Abschluss der vorherigen Analyse, NON_BLOCKING überspringt Frames bei Verzögerungen.
Der ImageCapture-Anwendungsfall macht Fotos von der Kamera mit Blitz-, Auflösungs- und Komprimierungseinstellungen. JPEG- und RAW-Formate werden unterstützt (auf kompatiblen Geräten). ImageCapture speichert das Bild asynchron über OnImageCapturedCallback oder direkt in eine Datei über ImageCapture.OutputFileOptions.
Der VideoCapture-Anwendungsfall wurde in CameraX 1.1.0 (Beta) hinzugefügt und ermöglicht die Aufnahme von Videos mit bis zu 4K bei 30 FPS. Der Anwendungsfall synchronisiert sich automatisch mit Preview: Das Bild im Sucher entspricht dem, was in die Datei aufgenommen wird. VideoCapture verwendet intern MediaCodec und MediaMuxer und verbirgt die Komplexität der Konfiguration von Videocodec und MP4-Container.
CameraX und Camera2 sind zwei Ansätze für die Arbeit mit der Kamera in Android. Camera2 ist eine Low-Level-API, die volle Kontrolle über das Gerät bietet. CameraX ist eine High-Level-Abstraktion, die typische Szenarien automatisiert. Die Wahl zwischen ihnen hängt von den Projektanforderungen ab.
| Merkmal | CameraX | Camera2 |
|---|---|---|
| API-Level | Hoch (Anwendungsfall) | Niedrig (volle Kontrolle) |
| Gerätespezifischer Code | Nicht erforderlich | Für jedes Gerät erforderlich |
| Lifecycle-Bindung | Automatisch | Manuell |
| Erweiterungen | Integriert (HDR, Portrait, Night) | Erfordern OEM-Implementierung |
| Implementierungskomplexität | 15–30 Codezeilen | 100–300 Codezeilen |
| API-Unterstützung | API 21+ | API 21+ |
| Flexibilität | Standard-Szenarien | Beliebige Szenarien |
Verwenden Sie CameraX für Standardaufgaben: In-App-Kamera, QR-Scanner, ML-Stream-Verarbeitung. Verwenden Sie Camera2, wenn manuelle Belichtungssteuerung, RAW-Aufnahmen mit vollständiger Parameterkontrolle oder die gleichzeitige Arbeit mit mehreren Kameras erforderlich ist.
Betrachten wir eine vollständige CameraX-Einrichtung in einer Android-Anwendung mit allen drei Hauptanwendungsfällen: Preview, ImageCapture und ImageAnalysis.
Der Code bindet CameraX über ProcessCameraProvider an den Activity-Lebenszyklus. Zuerst wird eine Instanz des Providers angefordert, dann werden die Anwendungsfälle erstellt und die Bindung durchgeführt.
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview erstellen
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture erstellen
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// An Lifecycle binden
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Der Kotlin-Code erhält ProcessCameraProvider über einen Future, erstellt die Anwendungsfälle Preview und ImageCapture und bindet sie an den Lebenszyklus der aktuellen Activity. CameraX behandelt automatisch Bildschirmdrehung, Kamerwechsel und die Freigabe von Ressourcen beim Schließen der Activity.
Fügen wir einen ImageAnalysis-Anwendungsfall für die frame-basierte Verarbeitung des Kamerastreams hinzu, beispielsweise für die Integration mit ML Kit.
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// YUV in Bitmap für ML Kit konvertieren
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit Texterkennung starten
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// Ergebnis verarbeiten
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
ImageAnalysis mit KEEP_ONLY_LATEST-Strategie verarbeitet nur den letzten verfügbaren Frame und überspringt veraltete Frames, wenn der Analysator nicht mithalten kann. Jeder Frame wird für ML Kit von YUV in Bitmap konvertiert, woraufhin die Texterkennung gestartet wird. Der Aufruf von imageProxy.close() ist obligatorisch — andernfalls stellt CameraX die Bereitstellung neuer Frames ein.
CameraX Extensions ist ein Modul, das erweiterte Aufnahmemodi hinzufügt: Porträt (Hintergrundunschärfe), HDR (erweiterter Dynamikumfang), Nachtmodus (Aufnahmen bei schwachem Licht), automatische Retusche (Hautkorrektur) und Beauty-Modus. Erweiterungen werden nur auf Geräten aktiviert, auf denen der Kamerahersteller eine OEM-Implementierung bereitgestellt hat.
Bevor Sie CameraX Extensions verwenden, müssen Sie prüfen, ob die Erweiterung auf dem aktuellen Gerät verfügbar ist. Google empfiehlt die Prüfung über ExtensionsManager.isExtensionAvailable.
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// Porträtmodus aktivieren
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
Der Code prüft die Unterstützung für die BOKEH-Erweiterung (Porträt) über ExtensionsManager und aktiviert sie, wenn eine OEM-Implementierung verfügbar ist. CameraX schaltet automatisch die Kameraeinstellungen für den Porträtmodus um. Wenn die Erweiterung nicht verfügbar ist, arbeitet die App im Standardmodus ohne Abstürze weiter.
CameraX Extensions löst eines der Hauptprobleme der Android-Entwicklung: Kamera-Fragmentierung. Auf verschiedenen Geräten wird der Porträtmodus unterschiedlich implementiert — einige verwenden Dual-Linsen, andere Software-Unschärfe. CameraX abstrahiert diesen Unterschied: Der Entwickler aktiviert den BOKEH-Modus, und die Bibliothek selbst bestimmt, wie er auf einem bestimmten Gerät implementiert wird. Google pflegt eine Liste verifizierter OEM-Partner: Samsung, Xiaomi, OPPO, vivo, Google Pixel.
Bei der Arbeit mit CameraX ist es wichtig, die Einschränkungen bei der Anzahl gleichzeitiger Anwendungsfälle zu beachten: Auf den meisten Geräten können maximal 3 Anwendungsfälle gleichzeitig ausgeführt werden. Beispielsweise funktioniert Preview + ImageCapture + ImageAnalysis auf allen modernen Geräten, aber Preview + ImageCapture + VideoCapture wird möglicherweise auf Budget-Modellen nicht unterstützt. CameraX bietet die Methode ProcessCameraProvider.checkAvailability(), die die Kompatibilität der Anwendungsfallkombination vor der Bindung prüft und so Laufzeitabstürze verhindert.
CameraX integriert sich über CameraXFragment oder Compose-kompatibles PreviewView in Jetpack Navigation. Für Compose wird das AndroidView-Element verwendet, in das PreviewView eingebettet wird. CameraX behandelt Bildschirmdrehung und Konfigurationsänderungen korrekt, ohne den Kamerasitzungsstatus zu verlieren — geben Sie einfach den LifecycleOwner an, und die Bibliothek erstellt die Anwendungsfallbindungen beim Drehen des Geräts automatisch neu.
Zum Testen von CameraX ohne echtes Gerät stellt Google TestableCameraX zur Verfügung — eine Bibliothek, die das Kameraverhalten in Komponententests emuliert. TestableCameraX ermöglicht die Simulation von Kameraframes, das Testen der ImageAnalysis-Funktion und der ImageCapture-Korrektheit ohne physisches Gerät. Dies beschleunigt die CI/CD-Pipeline für Projekte, die mit der Kamera arbeiten, erheblich.
Häufig gestellte Fragen
Android 5.0 (API 21) und höher. CameraX deckt 99 % der aktiven Android-Geräte ab. Erweiterungen (Portrait, HDR) erfordern API 23+ und OEM-Unterstützung für den jeweiligen Modus.
Ja, der ImageAnalysis-Anwendungsfall übergibt jeden Frame an den Analysator. Frames werden von YUV_420_888 in InputImage für ML Kit konvertiert. Dies ist das Standardmuster für die Erstellung eines ML-Scanners.
CameraX ist eine High-Level-API mit Use-Case-Architektur, automatischer Lifecycle-Bindung und Behandlung gerätespezifischer Unterschiede. Camera2 ist eine Low-Level-API, die volle Kamera-Kontrolle mit einer großen Menge an Boilerplate-Code bietet.
Ja, der VideoCapture-Anwendungsfall wurde in CameraX 1.1.0-beta hinzugefügt. Er nimmt Videos mit Mikrofon auf und synchronisiert sich mit Preview. Für komplexere Szenarien verwenden Sie direkt Camera2.
Über CameraSelector: DEFAULT_BACK_CAMERA oder DEFAULT_FRONT_CAMERA. Zum Wechseln rufen Sie cameraProvider.bindToLifecycle() mit einem neuen Selektor auf — CameraX startet die Sitzung automatisch neu.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch