Modern Android smartphones must dynamically adjust their cellular radio, telephony, and network stacks to comply with the technical requirements of hundreds of wireless carriers worldwide. Rather than hard-coding telecom parameters into the core operating system or device firmware, Android utilizes the Carrier Configuration Service (carrier_config). This architecture enables carrier-specific feature bundles to load dynamically whenever a SIM card is inserted or switched.
Carrier configuration bundles dictate critical telephony behaviors—including IP Multimedia Subsystem (IMS) registration, Voice over LTE (VoLTE), Wi-Fi Calling (VoWiFi), Video Calling (ViLTE), 5G Standalone (SA) and Non-Standalone (NSA) network band support, Access Point Names (APN), and MMS message size thresholds. When troubleshooting cellular connectivity failures or validating telecom provisioning, engineers use the Android Debug Bridge (ADB) to inspect the active carrier configuration via dumpsys carrier_config.
Understanding the Carrier Configuration Framework
The Android telephony stack evaluates carrier configurations across a hierarchical pipeline:
- Carrier Identification: Android queries the SIM’s Mobile Country Code (MCC), Mobile Network Code (MNC), GID1, and SPN, resolving them against the Android Carrier ID database.
- Configuration Overlay Loading: Android loads base default values (
carrier_config_mccmnc.xml), overlays specific carrier-signed updates, and applies manufacturer adaptations. - Dynamic Telephony Dispatch: Telephony services (such as RIL, IMS, and DataConnectionTracker) query
CarrierConfigManagerto determine feature availability and radio configurations.
Connecting to ADB and Inspecting SIM Slots
Connect your Android test device to your workstation with USB debugging enabled. Confirm device responsiveness:
adb devices
Verify the active SIM subscription IDs and slot indices available on the device using telephony.registry:
adb shell dumpsys telephony.registry | grep -i "mSubId"
On single-SIM devices, the primary subscription ID is typically 1; on dual-SIM devices, subscriptions are indexed separately (e.g. subId 1 and subId 2).
Querying the Complete Carrier Configuration State
To inspect the complete set of carrier parameters currently applied to the device, execute:
adb shell dumpsys carrier_config
Because carrier configuration bundles contain hundreds of diagnostic keys, filter the output by subscription ID or specific functional areas.
To dump configuration keys for a specific subscription ID (e.g. subId 1):
adb shell dumpsys carrier_config --sub 1
Auditing Critical VoLTE, VoWiFi, and IMS Flags
When investigating issues where Wi-Fi Calling or VoLTE toggle switches are missing from device settings, inspect the primary IMS provisioning keys:
adb shell dumpsys carrier_config | grep -E "carrier_volte|carrier_wfc|carrier_ims"
Evaluate the returned boolean flags against standard expected values:
| Carrier Config Key | Typical Value | Telephony Meaning |
|---|---|---|
carrier_volte_available_bool |
true |
Enables Voice over LTE (VoLTE) dialling and settings menu visibility |
carrier_wfc_ims_available_bool |
true |
Enables Wi-Fi Calling (VoWiFi) across the device telephony stack |
carrier_wfc_supports_wifi_only_bool |
false / true |
Determines whether calls can be placed when cellular signal is completely absent |
carrier_default_wfc_ims_enabled_bool |
true |
Specifies whether Wi-Fi calling is activated by default out-of-the-box |
carrier_supports_ss_over_ut_bool |
true |
Governs Supplementary Services (call forwarding, call waiting) over the XCAP/Ut interface |
Inspecting 5G NR and Advanced Radio Parameters
To verify whether the mobile carrier allows the device to connect to 5G Standalone (SA) or Non-Standalone (NSA) network cells, search for New Radio (NR) configuration keys:
adb shell dumpsys carrier_config | grep -i "5g_nr"
Key indicators include:
carrier_nr_availabilities_int_array: Bitmask indicating support for NSA (bit 1) and SA (bit 2) network architectures.nr_timers_reset_if_rat_type_changed_bool: Governs how the radio interface layer manages 5G radio resource control (RRC) transitions.
Overriding Carrier Configurations via ADB Command Shell
During cellular network testing or IMS lab certification, telecom engineers often need to test how an application or telephony stack behaves when a carrier feature is toggled, without requesting a new OTA carrier bundle.
Using cmd carrier_config, administrators can inject runtime overrides directly into the active subscription:
# Temporarily force VoLTE available flag to true
adb shell cmd carrier_config set-override --sub 1 carrier_volte_available_bool true
# Verify that the override is reflected in active state
adb shell dumpsys carrier_config | grep "carrier_volte_available_bool"
To clear all testing overrides and revert to the official signed carrier bundle:
adb shell cmd carrier_config clear-override --sub 1
Tracing Live Configuration Updates in Logcat
To monitor when carrier configuration bundles are loaded, reloaded, or updated by SIM swap events, filter the system logcat stream:
adb logcat -s CarrierConfigLoader:* CarrierConfigManager:*
Using dumpsys carrier_config via ADB provides mobile developers, telecom operators, and device testers with complete transparency into carrier-specific provisioning, ensuring smooth IMS registration and accurate feature behavior across global mobile networks.