CameraX: Was es ist, CameraX-API und wie die Kamera funktioniert

Autor: IT Sectr Veröffentlicht: 2026-03-26 Lesezeit: 8 Min.

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 Jetpack-Bibliothek für die Android-Kamera mit Use-Case-API: Preview, ImageCapture und ImageAnalysis
  • Use-Case-Architektur befreit den Entwickler von manueller Sitzungsverwaltung und Kamera-Zuständen
  • CameraX Extensions fügen auf unterstützten Geräten Porträtmodus, HDR und Nachtaufnahmen hinzu
  • Typsicherheit — CameraX prüft die Kompatibilität der Anwendungsfälle über ProcessCameraProvider
  • Kompatibilität mit 99 % der Android-Geräte ab Android 5.0 (API 21)

Was ist CameraX?

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.

Hauptfunktionen

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-Anwendungsfälle

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.

AnwendungsfallZweckKlasse
PreviewEchtzeit-Kamerabild anzeigenPreviewView
ImageCaptureFotos mit Blitz- und Auflösungseinstellungen aufnehmenImageCapture
ImageAnalysisJeden Frame für die ML-Verarbeitung analysierenImageAnalysis
VideoCaptureVideo mit Mikrofon aufnehmen (seit 1.1.0-beta)VideoCapture

Preview

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.

ImageAnalysis

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.

ImageCapture

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.

VideoCapture — Videoaufnahme

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

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.

MerkmalCameraXCamera2
API-LevelHoch (Anwendungsfall)Niedrig (volle Kontrolle)
Gerätespezifischer CodeNicht erforderlichFür jedes Gerät erforderlich
Lifecycle-BindungAutomatischManuell
ErweiterungenIntegriert (HDR, Portrait, Night)Erfordern OEM-Implementierung
Implementierungskomplexität15–30 Codezeilen100–300 Codezeilen
API-UnterstützungAPI 21+API 21+
FlexibilitätStandard-SzenarienBeliebige 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.

Kotlin-Codebeispiele

Betrachten wir eine vollständige CameraX-Einrichtung in einer Android-Anwendung mit allen drei Hauptanwendungsfällen: Preview, ImageCapture und ImageAnalysis.

ProcessCameraProvider einrichten

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.

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

ImageAnalysis für ML-Verarbeitung

Fügen wir einen ImageAnalysis-Anwendungsfall für die frame-basierte Verarbeitung des Kamerastreams hinzu, beispielsweise für die Integration mit ML Kit.

kotlin
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

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.

Erweiterungen prüfen und aktivieren

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.

kotlin
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

Ab welchen Android-Versionen funktioniert CameraX?

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.

Kann CameraX mit ML Kit verwendet werden?

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.

Worin unterscheidet sich CameraX von Camera2?

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.

Unterstützt CameraX Videoaufnahme?

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.

Wie wechsle ich zwischen Front- und Rückkamera?

Ü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

  • CameraX ist eine Jetpack-Bibliothek für die Android-Kamera mit Use-Case-Architektur (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Anwendungsfälle können in einer Sitzung kombiniert werden: Preview + ImageAnalysis für ML oder Preview + ImageCapture für Fotos
  • Lifecycle-Bindung verwaltet Kameraressourcen automatisch bei Bildschirmdrehung und Aktivitätszustandsänderungen
  • CameraX Extensions fügen auf kompatiblen Geräten Porträtmodus, HDR und Nachtaufnahmen hinzu
  • Kompatibilität mit 99 % der Android-Geräte ab API 21 ohne gerätespezifischen Code
  • ML Kit-Integration über ImageAnalysis ermöglicht die Echtzeitanalyse jedes Frames
  • Für Standardaufgaben ist CameraX die optimale Wahl, für volle Kontrolle verwenden Sie Camera2

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.

Projekt besprechen

Lesen Sie auch