CameraX پیچیدہ Camera2 کے اوپر ایک سادہ اور مستقل API فراہم کرنے والی Android Jetpack لائبریری ہے۔ یہ سینکڑوں Android ڈیوائس ماڈلز کے درمیان فرق کو تجریدی بناتی ہے اور مختلف ہارڈویئر پر یکساں کیمرہ رویے کو یقینی بناتی ہے۔ Android Developer CameraX Guide (2026) کے مطابق، یہ لائبریری 25,000+ Google Play ایپس میں استعمال ہوتی ہے اور API Level 21 اور اس سے اوپر کے آلات پر کام کرتی ہے۔
اہم نکات
CameraX Android Jetpack سوٹ کی ایک لائبریری ہے، جسے Google نے پہلی بار 2019 میں پرانی Camera API کے متبادل اور پیچیدہ Camera2 کے آسان متبادل کے طور پر جاری کیا۔ CameraX کا بنیادی فلسفہ ہے “ایک بار لکھیں، تمام آلات پر چلائیں”۔ لائبریری خود بخود ہارڈویئر کے فرق کو سنبھالتی ہے: کیمرہ کی پوزیشن، معاون ریزولوشنز، سینسر کی سمت اور دستیاب فارمیٹس — ڈیولپر کو ڈیوائس کے مخصوص کوڈ لکھنے کی ضرورت نہیں ہے۔
CameraX کا فن تعمیر استعمال کے کیسز پر بنایا گیا ہے: Preview (Viewfinder میں کیمرہ فیڈ دکھانا)، ImageCapture (تصاویر لینا)، ImageAnalysis (ML کے لیے فریم سٹریم کا تجزیہ) اور VideoCapture (ویڈیو ریکارڈ کرنا)۔ ہر استعمال کا کیس ایک آزاد جزو ہے جسے ملایا جا سکتا ہے: Viewfinder کے لیے Preview اور ML پروسیسنگ کے لیے ImageAnalysis کو بیک وقت چلانا۔ Google (2026) کے مطابق، CameraX API 21+ والے 99% Android آلات پر معاون ہے۔
CameraX سامنے اور پچھلے کیمرے کے درمیان خودکار سوئچنگ، سیشن کو دوبارہ بنائے بغیر اسکرین گھومنے کی حمایت، LifecycleOwner کے ذریعے بلٹ ان لائف سائیکل مینجمنٹ، استعمال کے کیسز کو ایک Lifecycle عمل سے منسلک کرنا، پورٹریٹ، HDR اور نائٹ موڈ کے لیے Camera2 Extensions کی حمایت، اور حقیقی ڈیوائس کے بغیر یونٹ ٹیسٹنگ کے لیے TestableCameraX فراہم کرتا ہے۔
CameraX چار معیاری استعمال کے کیسز کی وضاحت کرتا ہے، ہر ایک کیمرہ کے مخصوص کام کو حل کرتا ہے۔ استعمال کے کیسز کو ملایا جا سکتا ہے: سب سے مشہور امتزاج کیمرہ ایپ کے لیے Preview + ImageCapture اور ML سکینر کے لیے Preview + ImageAnalysis ہیں۔
| استعمال کا کیس | مقصد | کلاس |
|---|---|---|
| Preview | ریئل ٹائم میں کیمرہ فیڈ دکھانا | PreviewView |
| ImageCapture | فلیش اور ریزولوشن سیٹنگز کے ساتھ تصاویر لینا | ImageCapture |
| ImageAnalysis | ML پروسیسنگ کے لیے ہر فریم کا تجزیہ | ImageAnalysis |
| VideoCapture | مائیکروفون کے ساتھ ویڈیو ریکارڈ کرنا (1.1.0-beta سے) | VideoCapture |
Preview استعمال کا کیس کیمرہ ویڈیو سٹریم کو PreviewView میں دکھاتا ہے — CameraX لائبریری کا ایک خصوصی View۔ PreviewView خود بخود کیمرہ کے پہلو تناسب سے ہم آہنگ ہو جاتا ہے، ScaleType (FillCenter, FitCenter) اور استعمال کے کیس کو دوبارہ بنائے بغیر اسکرین گھومنے کی حمایت کرتا ہے۔ ڈیولپر کو صرف ProcessCameraProvider کے ذریعے Preview کو Lifecycle سے منسلک کرنے کی ضرورت ہے۔
ImageAnalysis استعمال کا کیس تجزیہ کے لیے ہر کیمرہ فریم کو ایک ہینڈلر کو بھیجتا ہے: متن کی پہچان، چہرے کی شناخت، QR کوڈ سکیننگ۔ تجزیہ کار YUV_420_888 فارمیٹ میں فریم وصول کرتا ہے — عالمگیر Android رنگ کی جگہ۔ آپریٹنگ موڈ (BLOCKING یا NON_BLOCKING) فریم قطار کو کنٹرول کرتا ہے: BLOCKING پچھلے تجزیہ کے مکمل ہونے کا انتظار کرتا ہے، NON_BLOCKING تاخیر کے دوران فریم چھوڑ دیتا ہے۔
ImageCapture استعمال کا کیس فلیش، ریزولوشن اور کمپریشن سیٹنگز کے ساتھ کیمرہ سے تصاویر لیتا ہے۔ JPEG اور RAW فارمیٹس معاون ہیں (مطابق آلات پر)۔ ImageCapture تصویر کو OnImageCapturedCallback کے ذریعے غیر مطابقت پذیر طور پر یا ImageCapture.OutputFileOptions کے ذریعے براہ راست فائل میں محفوظ کرتا ہے۔
VideoCapture استعمال کا کیس CameraX 1.1.0 (beta) میں شامل کیا گیا تھا اور 30 FPS پر 4K تک ویڈیو ریکارڈ کرنے کی اجازت دیتا ہے۔ استعمال کا کیس خود بخود Preview کے ساتھ مطابقت پذیر ہو جاتا ہے: Viewfinder میں تصویر وہی ہوتی ہے جو فائل میں ریکارڈ کی جا رہی ہے۔ VideoCapture اندرونی طور پر MediaCodec اور MediaMuxer استعمال کرتا ہے، ویڈیو کوڈیک اور MP4 کنٹینر کی تشکیل کی پیچیدگی کو چھپاتے ہوئے۔
CameraX اور Camera2 Android میں کیمرے کے ساتھ کام کرنے کے دو طریقے ہیں۔ Camera2 ایک نچلی سطح کی API ہے جو ڈیوائس پر مکمل کنٹرول دیتی ہے۔ CameraX ایک اعلیٰ سطحی تجرید ہے جو عام منظرناموں کو خودکار بناتا ہے۔ ان کے درمیان انتخاب پروجیکٹ کی ضروریات پر منحصر ہے۔
| خصوصیت | CameraX | Camera2 |
|---|---|---|
| API سطح | اعلیٰ (استعمال کا کیس) | نچلی (مکمل کنٹرول) |
| ڈیوائس مخصوص کوڈ | ضروری نہیں | ہر ڈیوائس کے لیے ضروری |
| Lifecycle منسلکہ | خودکار | دستی |
| توسیعات | بلٹ ان (HDR, Portrait, Night) | OEM نفاذ کی ضرورت |
| نفاذ کی پیچیدگی | 15–30 لائن کوڈ | 100–300 لائن کوڈ |
| API حمایت | API 21+ | API 21+ |
| لچک | معیاری منظرنامے | کوئی بھی منظرنامہ |
معیاری کاموں کے لیے CameraX استعمال کریں: ایپ میں کیمرہ، QR سکینر، ML سٹریم پروسیسنگ۔ CameraX استعمال کریں جب دستی نمائش کنٹرول، مکمل پیرامیٹر کنٹرول کے ساتھ RAW شوٹنگ، یا ایک ساتھ متعدد کیمرے استعمال کرنے کی ضرورت ہو۔
آئیے تین اہم استعمال کے کیسز: Preview، ImageCapture اور ImageAnalysis کا استعمال کرتے ہوئے ایک Android ایپلیکیشن میں CameraX کی مکمل ترتیب کا جائزہ لیں۔
کوڈ ProcessCameraProvider کے ذریعے CameraX کو Activity Lifecycle سے منسلک کرتا ہے۔ پہلے فراہم کنندہ کا ایک مثال درخواست کیا جاتا ہے، پھر استعمال کے کیسز بنائے جاتے ہیں اور منسلکہ انجام دیا جاتا ہے۔
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 کوڈ ایک future کے ذریعے ProcessCameraProvider حاصل کرتا ہے، Preview اور ImageCapture استعمال کے کیسز بناتا ہے، اور انہیں موجودہ Activity Lifecycle سے منسلک کرتا ہے۔ CameraX خود بخود اسکرین گھومنے، کیمرہ تبدیل کرنے اور Activity بند ہونے پر وسائل کی آزادی کو سنبھالتا ہے۔
آئیے کیمرہ سٹریم کی فی فریم پروسیسنگ کے لیے ایک ImageAnalysis استعمال کا کیس شامل کریں، مثال کے طور پر ML Kit کے ساتھ انضمام کے لیے۔
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(
ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
)
.build()
imageAnalysis.setAnalyzer(
ContextCompact.getMainExecutor(this)
) { imageProxy ->
// ML Kit کے لیے YUV کو Bitmap میں تبدیل کرنا
val bitmap = ImageUtils.yuvToBitmap(imageProxy)
val inputImage = InputImage.fromBitmap(bitmap)
// ML Kit متن کی پہچان شروع کرنا
recognizer.process(inputImage)
.addOnSuccessListener { result ->
// نتیجہ پر کارروائی کرنا
processTextResult(result)
}
.addOnCompleteListener {
imageProxy.close()
}
}
KEEP_ONLY_LATEST حکمت عملی کے ساتھ ImageAnalysis صرف تازہ ترین دستیاب فریم پر کارروائی کرتا ہے، پرانے فریموں کو چھوڑ دیتا ہے اگر تجزیہ کار رفتار برقرار نہیں رکھ سکتا۔ ہر فریم ML Kit کے لیے YUV سے Bitmap میں تبدیل کیا جاتا ہے، جس کے بعد متن کی پہچان شروع کی جاتی ہے۔ imageProxy.close() کو کال کرنا لازمی ہے — ورنہ CameraX نئے فریم فراہم کرنا بند کر دے گا۔
CameraX Extensions ایک ماڈیول ہے جو جدید شوٹنگ موڈز شامل کرتا ہے: پورٹریٹ (پس منظر دھندلا)، HDR (توسیع شدہ متحرک رینج)، نائٹ موڈ (کم روشنی میں شوٹنگ)، آٹو ری ٹچ (جلد کی اصلاح) اور بیوٹی موڈ۔ توسیعات صرف ان آلات پر فعال ہوتی ہیں جہاں کیمرہ بنانے والے نے OEM نفاذ فراہم کیا ہو۔
CameraX Extensions استعمال کرنے سے پہلے، آپ کو یہ جانچنا ہوگا کہ آیا توسیع موجودہ ڈیوائس پر دستیاب ہے۔ Google ExtensionsManager.isExtensionAvailable کے ذریعے جانچ کرنے کی سفارش کرتا ہے۔
val extensionsManager =
ExtensionsManager.getInstance(this)
if (extensionsManager.isExtensionAvailable(
cameraProvider,
CameraSelector.DEFAULT_BACK_CAMERA,
ExtensionMode.BOKEH
)) {
// پورٹریٹ موڈ فعال کرنا
cameraProvider.bindToLifecycle(
this,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
imageCapture
)
}
کوڈ ExtensionsManager کے ذریعے BOKEH (پورٹریٹ) توسیع کے لیے حمایت کی جانچ کرتا ہے اور اسے فعال کرتا ہے اگر OEM نفاذ دستیاب ہو۔ CameraX خود بخود پورٹریٹ موڈ کے لیے کیمرہ سیٹنگز تبدیل کرتا ہے۔ اگر توسیع دستیاب نہیں ہے تو، ایپ بغیر کریش کے معیاری موڈ میں کام جاری رکھتی ہے۔
CameraX Extensions Android ڈیولپمنٹ کے اہم مسائل میں سے ایک کو حل کرتا ہے: کیمرہ فریگمنٹیشن۔ مختلف آلات پر، پورٹریٹ موڈ مختلف طریقے سے لاگو کیا جاتا ہے — کچھ ڈوئل لینس استعمال کرتے ہیں، کچھ سافٹ ویئر دھندلاپن استعمال کرتے ہیں۔ CameraX اس فرق کو تجریدی بناتا ہے: ڈیولپر BOKEH موڈ کو فعال کرتا ہے، اور لائبریری خود تعین کرتی ہے کہ اسے کسی مخصوص ڈیوائس پر کیسے لاگو کیا جائے۔ Google تصدیق شدہ OEM شراکت داروں کی فہرست رکھتا ہے: Samsung, Xiaomi, OPPO, vivo, Google Pixel۔
CameraX کے ساتھ کام کرتے وقت، بیک وقت استعمال کے کیسز کی تعداد پر حدود پر غور کرنا ضروری ہے: زیادہ تر آلات پر زیادہ سے زیادہ 3 استعمال کے کیسز بیک وقت چلائے جا سکتے ہیں۔ مثال کے طور پر، Preview + ImageCapture + ImageAnalysis تمام جدید آلات پر کام کرتا ہے، لیکن Preview + ImageCapture + VideoCapture بجٹ ماڈلز پر معاون نہیں ہو سکتا۔ CameraX طریقہ ProcessCameraProvider.checkAvailability() فراہم کرتا ہے، جو منسلک کرنے سے پہلے استعمال کے کیسز کے امتزاج کی مطابقت کو چیک کرتا ہے، رن ٹائم کریش سے بچنے میں مدد کرتا ہے۔
CameraX CameraXFragment یا Compose مطابق PreviewView کے ذریعے Jetpack Navigation کے ساتھ ضم ہوتا ہے۔ Compose کے لیے، AndroidView عنصر استعمال کیا جاتا ہے، جس میں PreviewView شامل کیا جاتا ہے۔ CameraX کیمرہ سیشن کی حالت کھونے کے بغیر اسکرین گھومنے اور کنفیگریشن تبدیلیوں کو صحیح طریقے سے سنبھالتا ہے — صرف LifecycleOwner کی وضاحت کریں، اور لائبریری ڈیوائس گھومنے پر خود بخود استعمال کے کیسز کے منسلکات کو دوبارہ بنائے گی۔
حقیقی ڈیوائس کے بغیر CameraX کی جانچ کرنے کے لیے، Google TestableCameraX فراہم کرتا ہے — ایک لائبریری جو یونٹ ٹیسٹوں میں کیمرہ رویے کی تقلید کرتی ہے۔ TestableCameraX جسمانی ڈیوائس کے بغیر کیمرہ فریم کی نقل، ImageAnalysis کے آپریشن اور ImageCapture کی درستگی کی جانچ کی اجازت دیتا ہے۔ یہ کیمرے کے ساتھ کام کرنے والے پروجیکٹس کے لیے CI/CD پائپ لائن کو نمایاں طور پر تیز کرتا ہے۔
اکثر پوچھے گئے سوالات
Android 5.0 (API 21) اور اس سے اوپر۔ CameraX فعال Android آلات کے 99% کو کور کرتا ہے۔ توسیعات (Portrait, HDR) کے لیے API 23+ اور مخصوص موڈ کے لیے OEM تعاون درکار ہے۔
ہاں، ImageAnalysis استعمال کا کیس ہر فریم کو تجزیہ کار کو بھیجتا ہے۔ فریم ML Kit کے لیے YUV_420_888 سے InputImage میں تبدیل کیے جاتے ہیں۔ ML سکینر بنانے کے لیے یہ معیاری نمونہ ہے۔
CameraX استعمال کے کیس فن تعمیر، خودکار Lifecycle منسلکہ اور ڈیوائس کے مخصوص فرق کے انتظام کے ساتھ ایک اعلیٰ سطحی API ہے۔ Camera2 ایک نچلی سطح کی API ہے جو بڑی مقدار میں boilerplate کوڈ کے ساتھ مکمل کیمرہ کنٹرول فراہم کرتی ہے۔
ہاں، VideoCapture استعمال کا کیس CameraX 1.1.0-beta میں شامل کیا گیا تھا۔ یہ مائیکروفون کے ساتھ ویڈیو ریکارڈ کرتا ہے اور Preview کے ساتھ مطابقت پذیر ہوتا ہے۔ زیادہ پیچیدہ منظرناموں کے لیے، براہ راست Camera2 استعمال کریں۔
CameraSelector کے ذریعے: DEFAULT_BACK_CAMERA یا DEFAULT_FRONT_CAMERA۔ سوئچ کرنے کے لیے، نئے سلیکٹر کے ساتھ cameraProvider.bindToLifecycle() کال کریں — CameraX خود بخود سیشن دوبارہ شروع کرے گا۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں