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 — 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+.
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.
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 case | Tujuan | Kelas |
|---|---|---|
| Preview | Menampilkan gambar kamera secara real-time | PreviewView |
| ImageCapture | Memotret dengan pengaturan flash dan resolusi | ImageCapture |
| ImageAnalysis | Menganalisis setiap bingkai untuk pemrosesan ML | ImageAnalysis |
| VideoCapture | Merekam video dengan mikrofon (sejak 1.1.0-beta) | VideoCapture |
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 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 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 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 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.
| Karakteristik | CameraX | Camera2 |
|---|---|---|
| Tingkat API | Tinggi (use case) | Rendah (kendali penuh) |
| Kode khusus perangkat | Tidak diperlukan | Diperlukan untuk setiap perangkat |
| Pengikatan ke Lifecycle | Otomatis | Manual |
| Ekstensi | Bawaan (HDR, Portrait, Night) | Memerlukan implementasi OEM |
| Kompleksitas implementasi | 15–30 baris kode | 100–300 baris kode |
| Dukungan API | API 21+ | API 21+ |
| Fleksibilitas | Skenario standar | Skenario 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.
Mari kita lihat konfigurasi lengkap CameraX di aplikasi Android menggunakan ketiga use case utama: Preview, ImageCapture, dan ImageAnalysis.
Kode mengikat CameraX ke Lifecycle Activity melalui ProcessCameraProvider. Pertama, instance provider diminta, kemudian use case dibuat dan pengikatan dilakukan.
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.
Mari tambahkan ImageAnalysis use case untuk pemrosesan bingkai demi bingkai aliran kamera, misalnya untuk integrasi dengan ML Kit.
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 — 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.
Sebelum menggunakan CameraX Extensions, perlu diperiksa apakah ekstensi tersedia di perangkat saat ini. Google merekomendasikan pemeriksaan melalui ExtensionsManager.isExtensionAvailable.
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
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.
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.
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.
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.
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
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.
Baca juga