CameraX: vad är det, CameraX API och hur kameran fungerar

Författare: IT Sectr Publicerad: 2026-03-26 Lästid: 8 min

CameraX — ett Android Jetpack-bibliotek för att arbeta med kameran, som ger ett enkelt och konsekvent API ovanpå den komplexa Camera2. Det abstraherar skillnaderna mellan hundratals Android-enhetsmodeller och garanterar samma kamerabeteende på olika enheter. Enligt Android Developer CameraX Guide (2026) används biblioteket i 25 000+ Google Play-appar och fungerar på enheter med API Level 21 och högre.

Huvudpunkter

  • CameraX — Jetpack-bibliotek för Android-kamera med use case-API: Preview, ImageCapture och ImageAnalysis
  • Use case-arkitektur befriar utvecklaren från manuell hantering av session och kamerastatus
  • CameraX Extensions lägger till porträttläge, HDR och nattfotografering på enheter som stöder det
  • Typsäkerhet — CameraX kontrollerar kompatibiliteten för use cases via ProcessCameraProvider
  • Kompatibilitet med 99% av Android-enheter från och med Android 5.0 (API 21)

Vad är CameraX?

CameraX — är ett bibliotek från Android Jetpack-paketet, första gången utgivet av Google 2019 som en ersättning för det föråldrade Camera API och ett förenklat alternativ till det komplexa Camera2. Huvudfilosofin för CameraX — „skriv en gång, fungerar på alla enheter". Biblioteket hanterar automatiskt hårdvaruskillnader: kameraplacering, upplösningar som stöds, sensororientering och tillgängliga format — utvecklaren behöver inte skriva enhetsspecifik kod.

Arkitekturen för CameraX är byggd på use cases: Preview (visa bild från kameran i Viewfinder), ImageCapture (ta fotografier), ImageAnalysis (analysera bildström för ML) och VideoCapture (spela in video). Varje use case är en oberoende komponent som kan kombineras: kör Preview för sökaren och ImageAnalysis för ML-bearbetning samtidigt. Enligt Google (2026) stöds CameraX på 99% av Android-enheter med API 21+.

Huvudfunktioner

CameraX erbjuder automatisk växling mellan främre och bakre kamera, stöd för skärmrotation utan att återskapa sessionen, inbyggd livscykelhantering via LifecycleOwner, bindning av use cases till en Lifecycle-process, stöd för Camera2 Extensions för porträtt, HDR och nattläge, samt TestableCameraX för enhetstestning utan verklig enhet.

CameraX use cases

CameraX definierar fyra standard use cases, som var och en löser en specifik kamerauppgift. Use cases kan kombineras: de populäraste kombinationerna är Preview + ImageCapture för kameran och Preview + ImageAnalysis för ML-skanner.

Use caseSyfteKlass
PreviewVisa kamerabild i realtidPreviewView
ImageCaptureTa fotografier med blixt- och upplösningsinställningarImageCapture
ImageAnalysisAnalysera varje bildruta för ML-bearbetningImageAnalysis
VideoCaptureSpela in video med mikrofon (från 1.1.0-beta)VideoCapture

Preview

Preview use case visar videoströmmen från kameran i PreviewView — en speciell View från CameraX-biblioteket. PreviewView anpassar sig automatiskt till kamerans bildförhållande, stöder ScaleType (FillCenter, FitCenter) och skärmrotation utan att återskapa use case. Utvecklaren behöver bara binda Preview till Lifecycle via ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case skickar varje bildruta från kameran till hanteraren för analys: textigenkänning, ansiktsdetektering, skanning av QR-koder. Analyzatorn tar emot bildrutor i YUV_420_888-format — det universella Android-färgrummet. Arbetsläge (BLOCKING eller NON_BLOCKING) hanterar bildrutekön: BLOCKING väntar på att föregående analys ska slutföras, NON_BLOCKING hoppar över bildrutor vid försening.

ImageCapture

ImageCapture use case tar fotografier från kameran med blixt-, upplösnings- och komprimeringsinställningar. Format som JPEG och RAW stöds (på kompatibla enheter). ImageCapture sparar fotografiet asynkront via OnImageCapturedCallback eller direkt till fil via ImageCapture.OutputFileOptions.

VideoCapture — spela in video

VideoCapture use case lades till i CameraX 1.1.0 (beta) och möjliggör videoinspelning i upplösning upp till 4K vid 30 FPS. Use case synkroniseras automatiskt med Preview: bilden i sökaren motsvarar det som spelas in till filen. VideoCapture använder internt MediaCodec och MediaMuxer och döljer komplexiteten i att konfigurera videocodec och MP4-container.

CameraX vs Camera2

CameraX och Camera2 — två tillvägagångssätt för att arbeta med kamera i Android. Camera2 — lågnivå-API som ger full kontroll över enheten. CameraX — högnivåabstraktion som automatiserar typiska scenarier. Valet mellan dem beror på projektets krav.

EgenskapCameraXCamera2
API-nivåHög (use case)Låg (full kontroll)
Enhetsspecifik kodKrävs inteKrävs för varje enhet
Bindning till LifecycleAutomatiskManuell
TilläggInbyggda (HDR, Portrait, Night)Kräver OEM-implementering
Implementeringskomplexitet15–30 rader kod100–300 rader kod
API-stödAPI 21+API 21+
FlexibilitetStandardscenarierAlla scenarier

Använd CameraX för standarduppgifter: kamera i app, QR-skanner, ML-strömbearbetning. Använd Camera2 när manuell exponeringskontroll, RAW-fotografering med full parameterkontroll, arbete med flera kameror samtidigt krävs.

Kodexempel i Kotlin

Låt oss titta på den fullständiga konfigurationen av CameraX i en Android-app med alla tre huvudsakliga use cases: Preview, ImageCapture och ImageAnalysis.

Konfigurera ProcessCameraProvider

Koden binder CameraX till Lifecycle för Activity via ProcessCameraProvider. Först begärs en instans av providern, sedan skapas use cases och bindning utförs.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

cameraProviderFuture.addListener({
    val cameraProvider = cameraProviderFuture.get()

    // Skapa Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Skapa ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Binda till Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin-kod får ProcessCameraProvider via future, skapar Preview- och ImageCapture-use cases och binder dem till Lifecycle för den aktuella Activity. CameraX hanterar automatiskt skärmrotation, kameraomkoppling och frigöring av resurser när Activity stängs.

ImageAnalysis för ML-bearbetning

Lägg till ImageAnalysis use case för bildrute-för-bildrute-bearbetning av kameraströmmen, till exempel för integration med ML Kit.

kotlin
val imageAnalysis = ImageAnalysis.Builder()
    .setBackpressureStrategy(
        ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
    )
    .build()

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Konvertera YUV till Bitmap för ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Starta ML Kit-textigenkänning
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Bearbeta resultatet
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis med KEEP_ONLY_LATEST-strategi bearbetar endast den senaste tillgängliga bildrutan och hoppar över föråldrade om analyzatorn inte hinner med. Varje bildruta konverteras från YUV till Bitmap för ML Kit, varefter textigenkänning startas. Anropet imageProxy.close() är obligatoriskt — annars slutar CameraX att leverera nya bildrutor.

CameraX Extensions

CameraX Extensions — modul som lägger till avancerade fotograferingslägen: porträtt (oskärpa bakgrunden), HDR (utökat dynamiskt omfång), nattläge (fotografera i svagt ljus), automatisk retusch (hudkorrigering) och „vackert ansikte"-läge (beauty). Tilläggen aktiveras endast på enheter där kameratillverkaren har tillhandahållit en OEM-implementering.

Kontrollera och aktivera tillägg

Innan du använder CameraX Extensions måste du kontrollera om tillägget är tillgängligt på den aktuella enheten. Google rekommenderar kontroll via ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Aktivera porträttläge
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Koden kontrollerar stöd för BOKEH-tillägget (porträtt) via ExtensionsManager och aktiverar det om en OEM-implementering finns tillgänglig. CameraX växlar automatiskt kamerasinställningarna till porträttläge. Om tillägget inte är tillgängligt fortsätter appen att fungera i standardläge utan krascher.

CameraX Extensions löser ett av huvudproblemen inom Android-utveckling: kamerafragmentering. På olika enheter implementeras porträttläge olika — vissa använder två linser, andra — mjukvaruskärpa. CameraX abstraherar denna skillnad: utvecklaren aktiverar BOKEH-läge och biblioteket bestämmer själv hur det ska implementeras på den specifika enheten. Google upprätthåller en lista över verifierade OEM-partners: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

När du arbetar med CameraX är det viktigt att ta hänsyn till begränsningar av antalet samtidiga use cases: på de flesta enheter kan maximalt 3 use cases köras samtidigt. Till exempel fungerar Preview + ImageCapture + ImageAnalysis på alla moderna enheter, men Preview + ImageCapture + VideoCapture kanske inte stöds på budgetmodeller. CameraX tillhandahåller metoden ProcessCameraProvider.checkAvailability() som kontrollerar kompatibiliteten för use case-kombinationen före bindning, vilket gör det möjligt att undvika krascher under körning.

CameraX integreras med Jetpack Navigation via CameraXFragment eller Compose-kompatibel PreviewView. För Compose används elementet AndroidView där PreviewView är inbäddat. CameraX hanterar korrekt skärmrotation och konfigurationsändring utan att förlora kamerasessionens tillstånd — det räcker att ange LifecycleOwner och biblioteket återskapar automatiskt use case-bindningarna vid rotation av enheten.

För att testa CameraX utan verklig enhet tillhandahåller Google TestableCameraX — ett bibliotek som emulerar kamerabeteende i enhetstester. TestableCameraX gör det möjligt att simulera bildrutor från kameran, kontrollera ImageAnalysis-funktionen och korrektheten i ImageCapture-bearbetning utan fysisk enhet. Detta påskyndar avsevärt CI/CD-pipelinen för projekt som arbetar med kamera.

Vanliga frågor

Från vilka Android-versioner fungerar CameraX?

Android 5.0 (API 21) och högre. CameraX täcker 99% av aktiva Android-enheter. För tillägg (Portrait, HDR) krävs API 23+ och OEM-stöd för det specifika läget.

Kan CameraX användas med ML Kit?

Ja, ImageAnalysis use case skickar varje bildruta till analyzatorn. Bildrutor konverteras från YUV_420_888 till InputImage för ML Kit. Detta är standardmönstret för att skapa en ML-skanner.

Vad är skillnaden mellan CameraX och Camera2?

CameraX — högnivå-API med use case-arkitektur, automatisk Lifecycle-bindning och hantering av enhetsspecifika skillnader. Camera2 — lågnivå full kontroll över kameran med mycket boilerplate-kod.

Stöder CameraX videoinspelning?

Ja, VideoCapture use case lades till i CameraX 1.1.0-beta. Det spelar in video med mikrofon och synkroniseras med Preview. För mer komplexa scenarier, använd Camera2 direkt.

Hur växlar man mellan främre och bakre kamera?

Via CameraSelector: DEFAULT_BACK_CAMERA eller DEFAULT_FRONT_CAMERA. För att växla, anropa cameraProvider.bindToLifecycle() med en ny väljare — CameraX startar om sessionen automatiskt.

Sammanfattning

  • CameraX — Jetpack-bibliotek för Android-kamera med use case-arkitektur (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use cases kombineras i en session: Preview + ImageAnalysis för ML eller Preview + ImageCapture för foton
  • Lifecycle-bindning hanterar automatiskt kameraresurser vid skärmrotation och ändring av Activity-status
  • CameraX Extensions lägger till porträttläge, HDR och nattfotografering på kompatibla enheter
  • Kompatibilitet med 99% av Android-enheter från API 21 utan enhetsspecifik kod
  • Integration med ML Kit via ImageAnalysis möjliggör realtidsanalys av varje bildruta
  • För standarduppgifter är CameraX det optimala valet, för full kontroll använd Camera2

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också