CameraX, karmaşık Camera2 üzerinde basit ve tutarlı bir API sağlayan bir Android Jetpack kütüphanesidir. Yüzlerce Android cihaz modeli arasındaki farklılıkları soyutlar ve farklı donanımlarda tutarlı kamera davranışı garanti eder. Android Developer CameraX Guide (2026)'ya göre, kütüphane 25.000'den fazla Google Play uygulamasında kullanılmakta ve API Level 21 ve üzeri cihazlarda çalışmaktadır.
Önemli Noktalar
CameraX, Google tarafından 2019 yılında ilk kez yayınlanan, eski Camera API'nin yerine geçen ve karmaşık Camera2'nin basitleştirilmiş alternatifi olan bir Android Jetpack paketi kütüphanesidir. CameraX'in temel felsefesi “bir kez yaz, tüm cihazlarda çalıştır” şeklindedir. Kütüphane, donanım farklılıklarını otomatik olarak işler: kamera konumları, desteklenen çözünürlükler, sensör yönü ve mevcut formatlar — geliştiricinin cihaza özel kod yazması gerekmez.
CameraX mimarisi kullanım durumları üzerine kurulmuştur: Preview (kamera akışını Viewfinder'da gösterme), ImageCapture (fotoğraf çekme), ImageAnalysis (ML için kare akışını analiz etme) ve VideoCapture (video kaydetme). Her kullanım durumu bağımsız bir bileşendir ve birleştirilebilir: vizör için Preview ve ML işleme için ImageAnalysis'i aynı anda çalıştırabilirsiniz. Google'a (2026) göre CameraX, API 21+ ile Android cihazların %99'unda desteklenmektedir.
CameraX, ön ve arka kameralar arasında otomatik geçiş, oturumu yeniden oluşturmadan ekran döndürme desteği, LifecycleOwner aracılığıyla yerleşik yaşam döngüsü yönetimi, kullanım durumlarını tek bir Lifecycle sürecine bağlama, portre, HDR ve gece modu için Camera2 Extensions desteği ve gerçek cihaz olmadan birim testi için TestableCameraX sağlar.
CameraX, her biri belirli bir kamera görevini çözen dört standart kullanım durumu tanımlar. Kullanım durumları birleştirilebilir: en popüler kombinasyonlar kamera uygulaması için Preview + ImageCapture ve ML tarayıcı için Preview + ImageAnalysis'dir.
| Kullanım Durumu | Amaç | Sınıf |
|---|---|---|
| Preview | Gerçek zamanlı kamera akışını gösterme | PreviewView |
| ImageCapture | Flaş ve çözünürlük ayarlarıyla fotoğraf çekme | ImageCapture |
| ImageAnalysis | ML işleme için her kareyi analiz etme | ImageAnalysis |
| VideoCapture | Mikrofonla video kaydetme (1.1.0-beta'dan itibaren) | VideoCapture |
Preview kullanım durumu, kamera video akışını PreviewView'da gösterir — CameraX kütüphanesinden özel bir View. PreviewView otomatik olarak kamera en-boy oranına uyum sağlar, ScaleType'ı (FillCenter, FitCenter) ve kullanım durumunu yeniden oluşturmadan ekran döndürmeyi destekler. Geliştiricinin yalnızca ProcessCameraProvider aracılığıyla Preview'ı bir Lifecycle'a bağlaması gerekir.
ImageAnalysis kullanım durumu, analiz için her kamera karesini bir işleyiciye gönderir: metin tanıma, yüz algılama, QR kod tarama. Analizör, kareleri YUV_420_888 formatında alır — evrensel Android renk alanı. Çalışma modu (BLOCKING veya NON_BLOCKING) kare kuyruğunu kontrol eder: BLOCKING önceki analizin tamamlanmasını bekler, NON_BLOCKING gecikmelerde kareleri atlar.
ImageCapture kullanım durumu, flaş, çözünürlük ve sıkıştırma ayarlarıyla kameradan fotoğraf çeker. JPEG ve RAW formatları desteklenir (uyumlu cihazlarda). ImageCapture, ekran görüntüsünü OnImageCapturedCallback aracılığıyla asenkron olarak veya ImageCapture.OutputFileOptions aracılığıyla doğrudan bir dosyaya kaydeder.
VideoCapture kullanım durumu, CameraX 1.1.0 (beta) ile eklenmiştir ve 30 FPS'de 4K'ya kadar video kaydetmeye olanak tanır. Kullanım durumu otomatik olarak Preview ile senkronize olur: vizördeki görüntü dosyaya kaydedilenle eşleşir. VideoCapture dahili olarak MediaCodec ve MediaMuxer kullanır, video codec ve MP4 kapsayıcı yapılandırmasının karmaşıklığını gizler.
CameraX ve Camera2, Android'de kamerayla çalışmak için iki yaklaşımdır. Camera2, cihaz üzerinde tam kontrol sağlayan düşük seviyeli bir API'dir. CameraX, tipik senaryoları otomatikleştiren yüksek seviyeli bir soyutlamadır. Aralarındaki seçim proje gereksinimlerine bağlıdır.
| Özellik | CameraX | Camera2 |
|---|---|---|
| API Seviyesi | Yüksek (kullanım durumu) | Düşük (tam kontrol) |
| Cihaza özel kod | Gerekmez | Her cihaz için gerekli |
| Yaşam döngüsü bağlama | Otomatik | Manuel |
| Uzantılar | Dahili (HDR, Portrait, Night) | OEM uygulaması gerekli |
| Uygulama karmaşıklığı | 15–30 satır kod | 100–300 satır kod |
| API Desteği | API 21+ | API 21+ |
| Esneklik | Standart senaryolar | Herhangi bir senaryo |
Standart görevler için CameraX kullanın: uygulama içi kamera, QR tarayıcı, ML akış işleme. Manuel pozlama kontrolü, tam parametre kontrolüyle RAW çekim veya aynı anda birden çok kamerayla çalışma gerektiğinde Camera2 kullanın.
Üç ana kullanım durumunu (Preview, ImageCapture ve ImageAnalysis) kullanarak bir Android uygulamasında CameraX'in tam kurulumunu inceleyelim.
Kod, CameraX'i ProcessCameraProvider aracılığıyla Activity yaşam döngüsüne bağlar. Önce sağlayıcının bir örneği istenir, ardından kullanım durumları oluşturulur ve bağlama gerçekleştirilir.
val cameraProviderFuture =
ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider = cameraProviderFuture.get()
// Preview Oluşturma
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(
binding.viewFinder.surfaceProvider
)
}
// ImageCapture Oluşturma
val imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
// Lifecycle'a Bağlama
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}, ContextCompact.getMainExecutor(this))
Kotlin kodu, bir future aracılığıyla ProcessCameraProvider'ı alır, Preview ve ImageCapture kullanım durumlarını oluşturur ve bunları mevcut Activity yaşam döngüsüne bağlar. CameraX, ekran döndürme, kamera değiştirme ve Activity kapatıldığında kaynakların serbest bırakılmasını otomatik olarak işler.
Kamera akışının kare kare işlenmesi için bir ImageAnalysis kullanım durumu ekleyelim, örneğin ML Kit ile entegrasyon için.
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// ML Kit için YUV'yi Bitmap'e Dönüştürme
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit metin tanımayı başlatma
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// Sonucu işleme
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST stratejisi ile ImageAnalysis, yalnızca en son kullanılabilir kareyi işler, analizör yetişemiyorsa eski kareleri atlar. Her kare, ML Kit için YUV'dan Bitmap'e dönüştürülür, ardından metin tanıma başlatılır. imageProxy.close() çağrısı zorunludur — aksi takdirde CameraX yeni kareler sağlamayı durdurur.
CameraX Extensions, gelişmiş çekim modları ekleyen bir modüldür: portre (arka plan bulanıklığı), HDR (genişletilmiş dinamik aralık), gece modu (düşük ışıkta çekim), otomatik rötuş (cilt düzeltme) ve güzellik modu. Uzantılar yalnızca kamera üreticisinin OEM uygulaması sağladığı cihazlarda etkinleştirilir.
CameraX Extensions'ı kullanmadan önce, uzantının mevcut cihazda kullanılabilir olup olmadığını kontrol etmelisiniz. Google, ExtensionsManager.isExtensionAvailable aracılığıyla kontrol edilmesini önerir.
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// Portre modunu etkinleştirme
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
Kod, ExtensionsManager aracılığıyla BOKEH (portre) uzantısı desteğini kontrol eder ve bir OEM uygulaması mevcutsa etkinleştirir. CameraX, portre modu için kamera ayarlarını otomatik olarak değiştirir. Uzantı mevcut değilse, uygulama çökmeden standart modda çalışmaya devam eder.
CameraX Extensions, Android geliştirmenin ana sorunlarından birini çözer: kamera parçalanması. Farklı cihazlarda portre modu farklı şekilde uygulanır — bazıları çift lens kullanır, bazıları yazılım bulanıklığı kullanır. CameraX bu farkı soyutlar: geliştirici BOKEH modunu etkinleştirir ve kütüphane, belirli bir cihazda nasıl uygulanacağını kendisi belirler. Google, doğrulanmış OEM ortaklarının bir listesini tutar: Samsung, Xiaomi, OPPO, vivo, Google Pixel.
CameraX ile çalışırken, eşzamanlı kullanım durumu sayısındaki sınırlamaları dikkate almak önemlidir: çoğu cihazda en fazla 3 kullanım durumu aynı anda çalıştırılabilir. Örneğin, Preview + ImageCapture + ImageAnalysis tüm modern cihazlarda çalışır, ancak Preview + ImageCapture + VideoCapture bütçe modellerinde desteklenmeyebilir. CameraX, bağlamadan önce kullanım durumu kombinasyonu uyumluluğunu kontrol eden ProcessCameraProvider.checkAvailability() yöntemini sağlayarak çalışma zamanı çökmelerini önlemeye yardımcı olur.
CameraX, CameraXFragment veya Compose uyumlu PreviewView aracılığıyla Jetpack Navigation ile entegre olur. Compose için, PreviewView'in gömülü olduğu AndroidView öğesi kullanılır. CameraX, kamera oturumu durumunu kaybetmeden ekran döndürme ve yapılandırma değişikliklerini doğru şekilde işler — yalnızca LifecycleOwner'ı belirtin, kütüphane cihaz döndüğünde kullanım durumu bağlamalarını otomatik olarak yeniden oluşturacaktır.
CameraX'i gerçek cihaz olmadan test etmek için Google, TestableCameraX'i sağlar — birim testlerde kamera davranışını taklit eden bir kütüphane. TestableCameraX, fiziksel bir cihaz olmadan kamera karelerini simüle etmeye, ImageAnalysis çalışmasını ve ImageCapture doğruluğunu test etmeye olanak tanır. Bu, kamerayla çalışan projeler için CI/CD boru hattını önemli ölçüde hızlandırır.
Sıkça Sorulan Sorular
Android 5.0 (API 21) ve üzeri. CameraX, aktif Android cihazlarının %99'unu kapsar. Uzantılar (Portrait, HDR) API 23+ ve belirli mod için OEM desteği gerektirir.
Evet, ImageAnalysis kullanım durumu her kareyi analizöre iletir. Kareler, ML Kit için YUV_420_888'den InputImage'a dönüştürülür. Bu, bir ML tarayıcı oluşturmak için standart desendir.
CameraX, kullanım durumu mimarisi, otomatik yaşam döngüsü bağlama ve cihaza özel farklılıkların işlenmesiyle yüksek seviyeli bir API'dir. Camera2, büyük miktarda tekrar eden kodla tam kamera kontrolü sağlayan düşük seviyeli bir API'dir.
Evet, VideoCapture kullanım durumu CameraX 1.1.0-beta'da eklenmiştir. Mikrofonla video kaydeder ve Preview ile senkronize olur. Daha karmaşık senaryolar için doğrudan Camera2 kullanın.
CameraSelector aracılığıyla: DEFAULT_BACK_CAMERA veya DEFAULT_FRONT_CAMERA. Geçiş yapmak için yeni bir seçiciyle cameraProvider.bindToLifecycle()'ı çağırın — CameraX oturumu otomatik olarak yeniden başlatacaktır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun