CameraX: шта је то, CameraX API и како ради камера

Аутор: IT Sectr Објављено: 2026-03-26 Време читања: 8 мин

CameraX — Android Jetpack библиотека за рад са камером, која пружа једноставан и конзистентан API изнад сложеног Camera2. Апстрахује разлике између стотина модела Android уређаја и гарантује исто понашање камере на различитим уређајима. Према Android Developer CameraX Guide (2026), библиотека се користи у 25 000+ апликација Google Play-а и ради на уређајима са API Level 21 и вишим.

Главне тачке

  • CameraX — Jetpack библиотека за Android камеру са use case API: Preview, ImageCapture и ImageAnalysis
  • Use case архитектура ослобађа програмера ручног управљања сесијом и стањима камере
  • CameraX Extensions додају портретни режим, HDR и ноћно снимање на уређајима који то подржавају
  • Безбедност типова — CameraX проверава компатибилност use cases кроз ProcessCameraProvider
  • Компатибилност са 99% Android уређаја почевши од Android 5.0 (API 21)

Шта је CameraX?

CameraX — је библиотека из састава Android Jetpack-а, први пут објављена од стране Google-а 2019. године као замена за застарели Camera API и поједностављена алтернатива сложеном Camera2. Основна филозофија CameraX-а — „напиши једном, ради на свим уређајима". Библиотека аутоматски обрађује хардверске разлике: положај камера, подржане резолуције, оријентацију сензора и доступне формате — програмер не мора да пише code специфичан за уређај.

Архитектура CameraX је изграђена на use cases: Preview (приказ слике са камере у Viewfinder-у), ImageCapture (фотографисање), ImageAnalysis (анализа тока кадрова за ML) и VideoCapture (снимање видеа). Сваки use case је независна компонента која се може комбиновати: истовремено покренути Preview за визир и ImageAnalysis за ML обраду. Према Google-у (2026), CameraX је подржан на 99% Android уређаја са API 21+.

Основне могућности

CameraX пружа аутоматско пребацивање између предње и задње камере, подршку за ротацију екрана без поновног креирања сесије, уграђену обраду животног циклуса кроз LifecycleOwner, повезивање use cases на један Lifecycle процес, подршку за Camera2 Extensions за портрет, HDR и ноћни режим, као и TestableCameraX за unit тестирање без правог уређаја.

CameraX use cases

CameraX дефинише четири стандардна use case-а, од којих сваки решава конкретан задатак рада са камером. Use cases се могу комбиновати: најпопуларније комбинације су Preview + ImageCapture за камеру и Preview + ImageAnalysis за ML скенер.

Use caseНаменаКласа
PreviewПриказ слике са камере у реалном временуPreviewView
ImageCaptureФотографисање са подешавањима блица и резолуцијеImageCapture
ImageAnalysisАнализа сваког кадра за ML обрадуImageAnalysis
VideoCaptureСнимање видеа са микрофоном (од 1.1.0-beta)VideoCapture

Preview

Preview use case приказује видео ток са камере у PreviewView-у — посебном View-у из библиотеке CameraX. PreviewView се аутоматски прилагођава односу страница камере, подржава ScaleType (FillCenter, FitCenter) и ротацију екрана без поновног креирања use case-а. Програмер треба само да повеже Preview са Lifecycle-ом кроз ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case прослеђује сваки кадар са камере руковаоцу за анализу: препознавање текста, детекцију лица, скенирање QR кодова. Анализатор прима кадрове у YUV_420_888 формату — универзалном Android простору боја. Режим рада (BLOCKING или NON_BLOCKING) управља редом кадрова: BLOCKING чека завршетак претходне анализе, NON_BLOCKING прескаче кадрове при кашњењу.

ImageCapture

ImageCapture use case прави фотографије са камере са подешавањима блица, резолуције и компресије. Подржани су JPEG и RAW формати (на компатибилним уређајима). ImageCapture чува снимак асинхроно кроз OnImageCapturedCallback или директно у датотеку путем ImageCapture.OutputFileOptions.

VideoCapture — снимање видеа

VideoCapture use case је додат у CameraX 1.1.0 (бета) и омогућава снимање видеа у резолуцији до 4K при 30 FPS. Use case се аутоматски синхронизује са Preview-ом: слика у визиру одговара ономе што се снима у датотеку. VideoCapture интерно користи MediaCodec и MediaMuxer, скривајући сложеност подешавања видео кодека и MP4 контејнера.

CameraX vs Camera2

CameraX и Camera2 — два приступа раду са камером у Android-у. Camera2 — ниск ниво API, који даје потпуну контролу над уређајем. CameraX — висок ниво апстракције, који аутоматизује типичне сценарије. Избор између њих зависи од захтева пројекта.

КарактеристикаCameraXCamera2
Ниво API-јаВисок (use case)Низак (пуна контрола)
Код специфичан за уређајНије потребанПотребан за сваки уређај
Повезивање са Lifecycle-омАутоматскоРучно
ПроширењаУграђена (HDR, Portrait, Night)Захтевају OEM имплементацију
Сложеност имплементације15–30 линија кода100–300 линија кода
Подршка за APIAPI 21+API 21+
ФлексибилностСтандардни сценаријиБило који сценарији

Користите CameraX за стандардне задатке: камера у апликацији, QR скенер, ML обрада тока. Користите Camera2 када је потребна ручна контрола експозиције, RAW фотографисање са потпуном контролом параметара, рад са више камера истовремено.

Примери кода у Kotlin-у

Размотримо пуну конфигурацију CameraX у Android апликацији коришћењем сва три главна use case-а: Preview, ImageCapture и ImageAnalysis.

Подешавање ProcessCameraProvider

Код повезује CameraX са Lifecycle-ом Activity кроз ProcessCameraProvider. Прво се захтева инстанца провајдера, затим се креирају use cases и извршава повезивање.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Креирање Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Креирање ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Повезивање са Lifecycle-ом
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin код добија ProcessCameraProvider кроз future, креира use cases Preview и ImageCapture, и повезује их са Lifecycle-ом тренутне Activity. CameraX аутоматски обрађује ротацију екрана, пребацивање камера и ослобађање ресурса при затварању Activity.

ImageAnalysis за ML обраду

Додајмо ImageAnalysis use case за обраду кадар по кадар тока са камере, на пример за интеграцију са ML Kit-ом.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Конверзија YUV у Bitmap за ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Покретање препознавања текста ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Обрада резултата
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis са стратегијом KEEP_ONLY_LATEST обрађује само последњи доступан кадар, прескачући застареле ако анализатор не стиже. Сваки кадар се конвертује из YUV-а у Bitmap за ML Kit, након чега се покреће препознавање текста. Позив imageProxy.close() је обавезан — у супротном CameraX престаје да испоручује нове кадрове.

CameraX Extensions

CameraX Extensions — модул који додаје напредне режиме снимања: портретни (замућење позадине), HDR (проширени динамички опсег), ноћни режим (снимање при слабом осветљењу), аутоматско ретуширање (корекција коже) и режим „лепо лице" (beauty). Проширења се активирају само на уређајима где је произвођач камере обезбедио OEM имплементацију.

Провера и укључивање проширења

Пре употребе CameraX Extensions потребно је проверити да ли је проширење доступно на тренутном уређају. Google препоручује проверу кроз ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Укључивање портретног режима
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Код проверава подршку за BOKEH (портретно) проширење кроз ExtensionsManager и укључује га ако постоји OEM имплементација. CameraX аутоматски пребацује подешавања камере за портретни режим. Ако проширење није доступно, апликација наставља да ради у стандардном режиму без падова.

CameraX Extensions решавају један од главних проблема Android развоја: фрагментацију камера. На различитим уређајима портретни режим се имплементира различито — неки користе два објектива, други — софтверско замућење. CameraX апстрахује ову разлику: програмер укључује BOKEH режим, а библиотека сама одређује како да га имплементира на конкретном уређају. Google одржава листу проверених OEM партнера: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

При раду са CameraX важно је узети у обзир ограничења броја истовремених use cases: на већини уређаја може се истовремено покренути максимално 3 use case-а. На пример, Preview + ImageCapture + ImageAnalysis раде на свим модерним уређајима, али Preview + ImageCapture + VideoCapture можда неће бити подржани на буџетским моделима. CameraX пружа метод ProcessCameraProvider.checkAvailability() који проверава компатибилност комбинације use cases пре повезивања, што омогућава избегавање crash-ова у runtime-у.

CameraX се интегрише са Jetpack Navigation кроз CameraXFragment или Compose-компатибилни PreviewView. За Compose користи се елемент AndroidView у који се уграђује PreviewView. CameraX исправно обрађује ротацију екрана и промену конфигурације без губитка стања сесије камере — довољно је навести LifecycleOwner, а библиотека ће аутоматски поново креирати повезивање use cases при ротацији уређаја.

За тестирање CameraX без правог уређаја Google пружа TestableCameraX — библиотеку која емулира понашање камере у unit тестовима. TestableCameraX омогућава симулацију кадрова са камере, проверу рада ImageAnalysis и исправност обраде ImageCapture без физичког уређаја. Ово значајно убрзава CI/CD цевовод за пројекте који раде са камером.

Често постављана питања

Од којих верзија Android-а ради CameraX?

Android 5.0 (API 21) и виши. CameraX покрива 99% активних Android уређаја. За проширења (Portrait, HDR) потребан је API 23+ и OEM подршка конкретног режима.

Може ли се CameraX користити са ML Kit-ом?

Да, ImageAnalysis use case прослеђује сваки кадар анализатору. Кадрови се конвертују из YUV_420_888 у InputImage за ML Kit. Ово је стандардни образац за креирање ML скенера.

Чим се CameraX разликује од Camera2?

CameraX — висок ниво API са use case архитектуром, аутоматским повезивањем са Lifecycle-ом и обрадом разлика специфичних за уређај. Camera2 — низак ниво потпуне контроле над камером са великом количином boilerplate кода.

Да ли CameraX подржава снимање видеа?

Да, VideoCapture use case је додат у CameraX 1.1.0-beta. Снима видео са микрофоном и синхронизује се са Preview-ом. За сложеније сценарије користите Camera2 директно.

Како пребацити између предње и задње камере?

Кроз CameraSelector: DEFAULT_BACK_CAMERA или DEFAULT_FRONT_CAMERA. За пребацивање позовите cameraProvider.bindToLifecycle() са новим селектором — CameraX ће аутоматски поново покренути сесију.

Закључци

  • CameraX — Jetpack библиотека за Android камеру са use case архитектуром (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use cases се комбинују у једној сесији: Preview + ImageAnalysis за ML или Preview + ImageCapture за фотографије
  • Повезивање са Lifecycle-ом аутоматски управља ресурсима камере при ротацији екрана и промени стања Activity
  • CameraX Extensions додају портретни режим, HDR и ноћно снимање на компатибилним уређајима
  • Компатибилност са 99% Android уређаја од API 21 без кода специфичног за уређај
  • Интеграција са ML Kit-ом кроз ImageAnalysis омогућава анализу сваког кадра у реалном времену
  • За стандардне задатке CameraX је оптималан избор, за потпуну контролу користите Camera2

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође