Guide · Updated
Camera2 API on Android
How to check what your phone’s camera can do.
The Camera2 API is how Android apps run a phone’s cameras, since Android 5.0. Each camera on the phone reports a hardware level (LEGACY, LIMITED, FULL or LEVEL_3) and a list of capabilities. Together they decide what any camera app can do with it: set shutter speed and ISO by hand (MANUAL_SENSOR), save RAW files (RAW), focus by hand. You can read both in a few minutes without root, with a probe app or one adb command.
The values come from the phone’s camera driver. An app can only use what that driver reports, so the same app offers more on one phone than on another.
01 · The API
What is the Camera2 API
Android 5.0 (API level 21) added the android.hardware.camera2 package and deprecated the old Camera API. Camera2 treats the camera as a pipeline: the app sends a request for each frame (exposure time, ISO, focus distance, tone curve, flash) and gets back the image with a result that says what the camera actually did.
Under it sits the camera HAL, the driver layer written for the phone’s chip. It decides what Camera2 reports for each camera, so what an app can do differs from phone to phone, and from camera to camera on one phone.
02 · Levels
Camera2 hardware levels: LEGACY, LIMITED, FULL, LEVEL_3
Android’s reference puts them in order, LEGACY < LIMITED < FULL < LEVEL_3: “each level adds additional features to the previous one”. EXTERNAL is for a camera plugged in over USB.
| Level | What Android says | For a camera app |
|---|---|---|
| LEGACY | “Backward compatibility mode”: no per-frame control, no manual sensor control, no manual post-processing. Phones that first shipped with Android 10 or later have no LEGACY cameras. | Auto exposure and autofocus, with exposure compensation. No manual shutter speed or ISO, no RAW. |
| LIMITED | “The baseline feature set”, and it “may also include additional capabilities that are subsets of FULL”. | Anything from auto only to manual exposure and RAW: read the capabilities. |
| FULL | Adds “per-frame manual control of sensor, flash, lens and post-processing settings, and image capture at a high rate”. Always has MANUAL_SENSOR and MANUAL_POST_PROCESSING. | Shutter speed and ISO by hand, manual focus where the lens moves, the app’s own tone curve and white balance. RAW is not guaranteed. |
| LEVEL_3 | Adds “YUV reprocessing and RAW image capture”. | All of FULL, plus RAW (DNG) files. |
| EXTERNAL | A camera plugged in over USB: “similar to LIMITED”, but it may not report lens and sensor details. | Depends on the camera. |
The level is a summary. A LIMITED camera can still offer manual exposure or RAW, and a FULL one need not offer RAW, so the capabilities answer “can I…” better than the level does.
03 · Capabilities
The capabilities that matter for photos
Each capability is “a contract”: listing it “guarantees that the whole set of features required” for it is there (Android’s reference). The ones a photographer cares about:
| Capability | What it allows |
|---|---|
MANUAL_SENSOR | Exposure time, ISO and frame duration set by hand; the lens too, if it can move; the flash, if there is one; AE lock. |
MANUAL_POST_PROCESSING | The app’s own tone curve, white balance gains and color matrix, and control of the lens shading correction. |
RAW | The sensor’s raw data and the metadata to read it, so an app can save a DNG. |
PRIVATE_REPROCESSING | Zero shutter lag: the app keeps the last few full-size frames and turns the one it wants into a JPEG. |
BURST_CAPTURE | At least 20 frames a second at 8 MP or more (the full sensor if it is smaller), and every size under 24 MP at 10 or more. |
LOGICAL_MULTI_CAMERA | One camera ID that stands for two or more physical cameras. |
SYSTEM_CAMERA | Only Android’s system components and privileged apps can open it, so an ordinary camera app never sees it. |
Outside the list
Some things belong to no level or capability and are read on their own:
- Manual focus
- The lens’s closest focus distance, in diopters (1 / meters). “If the lens is fixed-focus, this will be 0.” How exact the focus distances are is reported separately: calibrated, approximate or uncalibrated.
- Flash
- Whether the camera has a flash unit.
- Stabilization
- Optical stabilization, and video stabilization, are listed apart from the level.
04 · Check
How to check Camera2 support on your phone
With an app
Probe apps on Google Play read the same values and show them for each camera. The Custom Droid’s guide uses Camera2 API Probe (March Media Lab): under each camera ID, the “Hardware Level Support Category” and the capabilities. A phone has several camera IDs; the back camera you shoot with is the one that matters.
With adb, no root
Android’s own debugging tool prints the same values, with nothing installed on the phone:
- Turn on USB debugging. In Settings, find Build number (under About phone on most phones) and tap it seven times. Then open Developer options (under System on most phones) and turn on USB debugging.
- Get adb. Download SDK Platform-Tools from Google for Windows, macOS or Linux and unzip it. adb is inside.
- Connect the phone. Plug it in by USB and allow the computer when the phone asks.
- Run one command. In a terminal in the platform-tools folder (on Windows, start it with
.\adb):
For each camera it prints its capabilities, which way it faces and its level.adb shell "dumpsys media.camera | grep -A1 -E 'android.lens.facing|android.info.supportedHardwareLevel|android.request.availableCapabilities'" - Read the values. lens.facing is BACK or FRONT. supportedHardwareLevel is the level, often as a number: 0 LIMITED, 1 FULL, 2 LEGACY, 3 LEVEL_3, 4 EXTERNAL. availableCapabilities lists the capabilities by name. A camera with SYSTEM_CAMERA in its list is for the system and privileged apps only; the others are the ones every camera app can open.
05 · Enabling
Can you enable the Camera2 API?
Not without root. The level and the capabilities are what the phone’s camera driver reports, and an app cannot change system settings, so a “Camera2 enabler” needs root as well. Some makers kept Camera2 switched off in software on some phones: The Custom Droid names the Xiaomi Mi A1 and Mi A2, where turning it on meant rooting the phone.
On a phone that first shipped with Android 10 or later there is nothing to switch on: Android allows no LEGACY cameras there. And a switch can only expose what the driver already has. A camera without MANUAL_SENSOR stays without it, and no app can add manual exposure the driver does not offer.
06 · Clack
What Clack does on each phone
Clack is a film camera app for Android, built on Camera2. It uses one camera, the first back camera the phone lists, reads its level and capabilities when it opens, and shows only the controls that camera can carry out.
| Control | What it needs from the camera | Without it |
|---|---|---|
| Shutter speed and ISO dials | MANUAL_SENSOR, and the sensor’s ISO and exposure time ranges, which the dials span | Auto exposure, with exposure compensation |
| Manual focus ring and zone focus | A lens that focuses (closest focus above 0) and can be set by hand, and its focal length, aperture and sensor size for the depth of field band | Autofocus only |
| Flash button | A flash unit | No flash button |
| AE lock | AE lock offered | No AE-L button |
| Save RAW (DNG) | The RAW capability and a RAW size | “This camera does not write RAW.” JPEG only |
| Zero shutter lag | PRIVATE_REPROCESSING to a full-size JPEG, Android 9 or later | An ordinary still, taken after the press |
| The film base | A tone curve of the app’s own (contrast curve mode) | The films run on the phone’s own processed frame |
If the phone refuses a session with RAW or zero shutter lag in it, Clack steps down by itself: first without zero shutter lag, then without RAW. A full-size JPEG with the preview works at every level.
The film base
Clack’s films work best on a straight (y = x) tone curve of its own, which also turns off the phone’s local tone mapping and color enhancement, so the film model shapes the tones. A FULL camera always accepts such a curve (MANUAL_POST_PROCESSING); a LIMITED one may or may not. After install Clack checks by itself whether the phone’s processing is really off. It undoes a leftover curve or color shift it can measure, and turns the film base off for that camera if it cannot, or if frames stop with the curve.
One phone, measured
Clack is tested mostly on the CMF Phone 2 Pro (Android 16). The command above lists six cameras on it, all LEVEL_3. Four carry SYSTEM_CAMERA, one of them a logical multi-camera, so other apps see two: the back camera and the front one. The back camera reports MANUAL_SENSOR, MANUAL_POST_PROCESSING with a tone curve of up to 101 points, RAW (4080 × 3072, 10-bit) and zero shutter lag reprocessing. Its range by hand: ISO 100 to 16000, 1/10000 s to 32 s, a 5.56 mm f/1.88 lens that focuses down to 0.1 m.
AndroidComing soon to Google Play. More about Clack
Questions
- What is the Camera2 API?
- The interface Android apps use to run the phone’s cameras, added in Android 5.0 (API level 21). Each camera reports a hardware level and a list of capabilities, which say what apps can do with it.
- How do I check if my phone supports the Camera2 API?
- Every phone since Android 5.0 has it; what differs is the level. Read the back camera’s hardware level and capabilities with a probe app such as Camera2 API Probe, or with adb shell dumpsys media.camera and USB debugging on. Neither needs root.
- What is the difference between LIMITED and FULL?
- FULL always has per-frame manual control of the sensor, lens, flash and processing (MANUAL_SENSOR and MANUAL_POST_PROCESSING) and fast capture. LIMITED is the baseline and may offer some of those one by one, so check its capabilities.
- What do I need for manual shutter speed and ISO?
- The MANUAL_SENSOR capability. FULL and LEVEL_3 cameras always have it, a LIMITED camera may, a LEGACY camera never does.
- What do I need to shoot RAW on Android?
- The RAW capability. LEVEL_3 cameras always have it, FULL and LIMITED cameras may, a LEGACY camera never does.
- Can I enable the Camera2 API without root?
- No. The level and the capabilities come from the phone’s camera driver, and changing what it reports takes root. A phone that first shipped with Android 10 or later has no LEGACY cameras, so there is nothing to switch on.
- Why can’t camera apps use all of my phone’s lenses?
- Some cameras are marked SYSTEM_CAMERA: only the system and privileged apps can open them. The CMF Phone 2 Pro lists six cameras and opens two to other apps.
- Is there a list of phones that support Camera2?
- Every Android phone since 5.0 has the Camera2 API. The level differs from camera to camera, even on one phone, so checking your own takes less time than trusting a list.
Sources
- Android reference: CameraCharacteristics (hardware level, capabilities, focus)
- Android reference: CameraMetadata (each level and capability)
- Android Open Source Project: camera version support
- Android Developers: configure on-device developer options
- Android Developers: SDK Platform-Tools
- The Custom Droid: how to check Camera2 API support
Quotes are from Android’s reference. The CMF Phone 2 Pro’s values were read on that phone, by Clack’s engine and by the adb command on this page (26 October 2026).