CameraX: apa itu, CameraX API dan cara kerja kamera

Penulis: IT Sectr Diterbitkan: 2026-03-26 Waktu membaca: 8 mnt

CameraX — pustaka Android Jetpack untuk bekerja dengan kamera, menyediakan API sederhana dan konsisten di atas Camera2 yang kompleks. Ini mengabstraksi perbedaan antara ratusan model perangkat Android dan menjamin perilaku kamera yang sama pada perangkat berbeda. Menurut Android Developer CameraX Guide (2026), pustaka ini digunakan di 25.000+ aplikasi Google Play dan bekerja pada perangkat dengan API Level 21 ke atas.

Poin utama

  • CameraX — pustaka Jetpack untuk kamera Android dengan API use case: Preview, ImageCapture, dan ImageAnalysis
  • Arsitektur Use case membebaskan pengembang dari pengelolaan sesi dan status kamera secara manual
  • CameraX Extensions menambahkan mode potret, HDR, dan pemotretan malam pada perangkat yang mendukungnya
  • Keamanan tipe — CameraX memeriksa kompatibilitas use case melalui ProcessCameraProvider
  • Kompatibilitas dengan 99% perangkat Android mulai dari Android 5.0 (API 21)

Apa itu CameraX?

CameraX — adalah pustaka dari Android Jetpack, pertama kali dirilis oleh Google pada tahun 2019 sebagai pengganti Camera API yang usang dan alternatif sederhana untuk Camera2 yang kompleks. Filosofi utama CameraX — „tulis sekali, bekerja di semua perangkat". Pustaka secara otomatis menangani perbedaan perangkat keras: posisi kamera, resolusi yang didukung, orientasi sensor, dan format yang tersedia — pengembang tidak perlu menulis kode khusus perangkat.

Arsitektur CameraX dibangun di atas use case: Preview (menampilkan gambar dari kamera di Viewfinder), ImageCapture (memotret), ImageAnalysis (analisis aliran bingkai untuk ML), dan VideoCapture (merekam video). Setiap use case adalah komponen independen yang dapat dikombinasikan: menjalankan Preview untuk jendela bidik dan ImageAnalysis untuk pemrosesan ML secara bersamaan. Menurut Google (2026), CameraX didukung di 99% perangkat Android dengan API 21+.

Fitur utama

CameraX menyediakan peralihan otomatis antara kamera depan dan belakang, dukungan rotasi layar tanpa membuat ulang sesi, penanganan siklus hidup bawaan melalui LifecycleOwner, pengikatan use case ke satu proses Lifecycle, dukungan Camera2 Extensions untuk potret, HDR, dan mode malam, serta TestableCameraX untuk pengujian unit tanpa perangkat nyata.

Use case CameraX

CameraX mendefinisikan empat use case standar, yang masing-masing menyelesaikan tugas spesifik bekerja dengan kamera. Use case dapat dikombinasikan: kombinasi paling populer adalah Preview + ImageCapture untuk kamera dan Preview + ImageAnalysis untuk pemindai ML.

Use caseTujuanKelas
PreviewMenampilkan gambar kamera secara real-timePreviewView
ImageCaptureMemotret dengan pengaturan flash dan resolusiImageCapture
ImageAnalysisMenganalisis setiap bingkai untuk pemrosesan MLImageAnalysis
VideoCaptureMerekam video dengan mikrofon (sejak 1.1.0-beta)VideoCapture

Preview

Preview use case menampilkan aliran video dari kamera di PreviewView — View khusus dari pustaka CameraX. PreviewView secara otomatis menyesuaikan dengan rasio aspek kamera, mendukung ScaleType (FillCenter, FitCenter) dan rotasi layar tanpa membuat ulang use case. Pengembang hanya perlu mengikat Preview ke Lifecycle melalui ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case mengirimkan setiap bingkai dari kamera ke penangan untuk analisis: pengenalan teks, deteksi wajah, pemindaian kode QR. Penganalisis menerima bingkai dalam format YUV_420_888 — ruang warna universal Android. Mode kerja (BLOCKING atau NON_BLOCKING) mengelola antrean bingkai: BLOCKING menunggu penyelesaian analisis sebelumnya, NON_BLOCKING melewatkan bingkai jika terjadi keterlambatan.

ImageCapture

ImageCapture use case mengambil foto dari kamera dengan pengaturan flash, resolusi, dan kompresi. Format JPEG dan RAW didukung (pada perangkat yang kompatibel). ImageCapture menyimpan foto secara asinkron melalui OnImageCapturedCallback atau langsung ke file melalui ImageCapture.OutputFileOptions.

VideoCapture — merekam video

VideoCapture use case ditambahkan di CameraX 1.1.0 (beta) dan memungkinkan perekaman video dengan resolusi hingga 4K pada 30 FPS. Use case secara otomatis sinkron dengan Preview: gambar di jendela bidik sesuai dengan apa yang direkam ke file. VideoCapture menggunakan MediaCodec dan MediaMuxer secara internal, menyembunyikan kompleksitas konfigurasi codec video dan wadah MP4.

CameraX vs Camera2

CameraX dan Camera2 — dua pendekatan untuk bekerja dengan kamera di Android. Camera2 — API tingkat rendah, memberikan kendali penuh atas perangkat. CameraX — abstraksi tingkat tinggi, mengotomatiskan skenario tipikal. Pilihan di antara keduanya tergantung pada kebutuhan proyek.

KarakteristikCameraXCamera2
Tingkat APITinggi (use case)Rendah (kendali penuh)
Kode khusus perangkatTidak diperlukanDiperlukan untuk setiap perangkat
Pengikatan ke LifecycleOtomatisManual
EkstensiBawaan (HDR, Portrait, Night)Memerlukan implementasi OEM
Kompleksitas implementasi15–30 baris kode100–300 baris kode
Dukungan APIAPI 21+API 21+
FleksibilitasSkenario standarSkenario apa pun

Gunakan CameraX untuk tugas standar: kamera di aplikasi, pemindai QR, pemrosesan aliran ML. Gunakan Camera2 saat diperlukan kontrol eksposur manual, pemotretan RAW dengan kendali penuh parameter, bekerja dengan beberapa kamera secara bersamaan.

Contoh kode di Kotlin

Mari kita lihat konfigurasi lengkap CameraX di aplikasi Android menggunakan ketiga use case utama: Preview, ImageCapture, dan ImageAnalysis.

Konfigurasi ProcessCameraProvider

Kode mengikat CameraX ke Lifecycle Activity melalui ProcessCameraProvider. Pertama, instance provider diminta, kemudian use case dibuat dan pengikatan dilakukan.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

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

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

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

Kode Kotlin mendapatkan ProcessCameraProvider melalui future, membuat use case Preview dan ImageCapture, dan mengikatnya ke Lifecycle Activity saat ini. CameraX secara otomatis menangani rotasi layar, peralihan kamera, dan pelepasan sumber daya saat Activity ditutup.

ImageAnalysis untuk pemrosesan ML

Mari tambahkan ImageAnalysis use case untuk pemrosesan bingkai demi bingkai aliran kamera, misalnya untuk integrasi dengan ML Kit.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Konversi YUV ke Bitmap untuk ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Menjalankan pengenalan teks ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Memproses hasil
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis dengan strategi KEEP_ONLY_LATEST hanya memproses bingkai terakhir yang tersedia, melewatkan bingkai usang jika penganalisis tidak dapat mengimbangi. Setiap bingkai dikonversi dari YUV ke Bitmap untuk ML Kit, setelah itu pengenalan teks dijalankan. Pemanggilan imageProxy.close() wajib dilakukan — jika tidak, CameraX akan berhenti memberikan bingkai baru.

CameraX Extensions

CameraX Extensions — modul yang menambahkan mode pemotretan lanjutan: potret (mengaburkan latar belakang), HDR (rentang dinamis diperluas), mode malam (memotret dalam cahaya redup), retouching otomatis (koreksi kulit), dan mode „wajah cantik" (beauty). Ekstensi hanya aktif pada perangkat di mana produsen kamera menyediakan implementasi OEM.

Memeriksa dan mengaktifkan ekstensi

Sebelum menggunakan CameraX Extensions, perlu diperiksa apakah ekstensi tersedia di perangkat saat ini. Google merekomendasikan pemeriksaan melalui ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Mengaktifkan mode potret
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Kode memeriksa dukungan ekstensi BOKEH (potret) melalui ExtensionsManager dan mengaktifkannya jika implementasi OEM tersedia. CameraX secara otomatis mengalihkan pengaturan kamera ke mode potret. Jika ekstensi tidak tersedia, aplikasi terus bekerja dalam mode standar tanpa kerusakan.

CameraX Extensions memecahkan salah satu masalah utama pengembangan Android: fragmentasi kamera. Pada perangkat berbeda, mode potret diimplementasikan secara berbeda — beberapa menggunakan dua lensa, yang lain — pengaburan perangkat lunak. CameraX mengabstraksi perbedaan ini: pengembang mengaktifkan mode BOKEH, dan pustaka sendiri menentukan cara mengimplementasikannya pada perangkat tertentu. Google memelihara daftar mitra OEM terverifikasi: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Saat bekerja dengan CameraX, penting untuk mempertimbangkan batasan jumlah use case simultan: pada sebagian besar perangkat, maksimal 3 use case dapat dijalankan secara bersamaan. Misalnya, Preview + ImageCapture + ImageAnalysis berfungsi di semua perangkat modern, tetapi Preview + ImageCapture + VideoCapture mungkin tidak didukung pada model anggaran. CameraX menyediakan metode ProcessCameraProvider.checkAvailability() yang memeriksa kompatibilitas kombinasi use case sebelum pengikatan, sehingga menghindari crash saat runtime.

CameraX terintegrasi dengan Jetpack Navigation melalui CameraXFragment atau PreviewView yang kompatibel dengan Compose. Untuk Compose, digunakan elemen AndroidView tempat PreviewView disematkan. CameraX menangani rotasi layar dan perubahan konfigurasi dengan benar tanpa kehilangan status sesi kamera — cukup tentukan LifecycleOwner, dan pustaka secara otomatis akan membuat ulang pengikatan use case saat perangkat diputar.

Untuk menguji CameraX tanpa perangkat nyata, Google menyediakan TestableCameraX — pustaka yang mengemulasi perilaku kamera dalam pengujian unit. TestableCameraX memungkinkan simulasi bingkai kamera, memeriksa kerja ImageAnalysis dan kebenaran pemrosesan ImageCapture tanpa perangkat fisik. Ini secara signifikan mempercepat pipeline CI/CD untuk proyek yang bekerja dengan kamera.

Pertanyaan yang sering diajukan

Dari versi Android apa CameraX bekerja?

Android 5.0 (API 21) ke atas. CameraX mencakup 99% perangkat Android aktif. Untuk ekstensi (Portrait, HDR) diperlukan API 23+ dan dukungan OEM untuk mode tertentu.

Bisakah CameraX digunakan dengan ML Kit?

Ya, ImageAnalysis use case mengirimkan setiap bingkai ke penganalisis. Bingkai dikonversi dari YUV_420_888 ke InputImage untuk ML Kit. Ini adalah pola standar untuk membuat pemindai ML.

Apa perbedaan CameraX dengan Camera2?

CameraX — API tingkat tinggi dengan arsitektur use case, pengikatan Lifecycle otomatis, dan penanganan perbedaan khusus perangkat. Camera2 — kendali penuh tingkat rendah atas kamera dengan banyak kode boilerplate.

Apakah CameraX mendukung perekaman video?

Ya, VideoCapture use case ditambahkan di CameraX 1.1.0-beta. Merekam video dengan mikrofon dan sinkron dengan Preview. Untuk skenario yang lebih kompleks, gunakan Camera2 secara langsung.

Bagaimana cara beralih antara kamera depan dan belakang?

Melalui CameraSelector: DEFAULT_BACK_CAMERA atau DEFAULT_FRONT_CAMERA. Untuk beralih, panggil cameraProvider.bindToLifecycle() dengan pemilih baru — CameraX secara otomatis akan memulai ulang sesi.

Kesimpulan

  • CameraX — pustaka Jetpack untuk kamera Android dengan arsitektur use case (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use case digabungkan dalam satu sesi: Preview + ImageAnalysis untuk ML atau Preview + ImageCapture untuk foto
  • Pengikatan ke Lifecycle secara otomatis mengelola sumber daya kamera saat rotasi layar dan perubahan status Activity
  • CameraX Extensions menambahkan mode potret, HDR, dan pemotretan malam pada perangkat yang kompatibel
  • Kompatibilitas dengan 99% perangkat Android dari API 21 tanpa kode khusus perangkat
  • Integrasi dengan ML Kit melalui ImageAnalysis memungkinkan analisis setiap bingkai secara real-time
  • Untuk tugas standar CameraX adalah pilihan optimal, untuk kendali penuh gunakan Camera2

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga