Multiple Enabled Profiles

For devices running Android 13 or higher, Android supports multiple enabled profiles (MEPs) for eUICC. This feature allows devices to have dual SIM support using a single eSIM chip, which can have multiple SIM profiles and can connect to two different carriers at the same time. Device manufacturers must work with SoC vendors and eSIM chipset vendors to integrate this feature on their devices.


On devices running Android 12 and lower, AOSP provides limited support in allowing a single eSIM to support multiple profiles at the same time. Despite the significant space and cost savings that eSIM offers, this lack of dual SIM support prevents device manufacturers from adopting eSIM-only devices. To provide dual SIM support on an eSIM-only device, device manufacturers have to pack two eSIM elements into the device, which increases bill of material (BOM) costs and leads to poor user experiences for subscription management. The MEP feature available in AOSP from Android 13 addresses this issue.

eUICC architecture change

This section provides a comparison of the eSIM chip architecture for devices with MEP running Android 13 and for devices running without MEP Android 12 and lower. For devices supporting MEP as shown in Figure 1, the eSIM slot contains multiple eUICC ports, where each port can have an enabled profile. With this architecture, a single eUICC (a single physical slot) supports dual SIM dual standby (DSDS) by having each eUICC port link to a modem baseband. Figure 2 describes the eSIM chip architecture for devices without MEP.

eSIM chip architecture with MEP support

Figure 1. eSIM chip architecture with MEP support (Android 13 or higher)

eSIM chip architecture without MEP support

Figure 2. eSIM chip architecture without MEP support (Android 12 or lower)

API information flow for multiple enabled profiles

Figure 3 describes the information flow for MEP for eUICC in Android 13. The telephony framework includes the UiccPort class, which represents the physical structure on eUICC. The UiccPort class is used for all types of SIM cards: physical SIM (pSIM), integrated SIM (iSIM), and embedded SIM (eSIM). For an eUICC with multiple ports, a single UiccSlot object and UiccCard object map to multiple UiccPort instances. Each UiccPort instance can link to at most one UiccProfile instance. This flow allows UiccPort to map to a logical slot and UiccSlot (physical slot) to map to multiple logical slots.

MEP information flow

Figure 3. Information flow for eUICC with MEP support


This section describes how to implement the MEP feature including details about HAL requirements, APIs, and user interface. Device manufacturers should work with SoC vendors and eSIM chipset vendors to support MEP.

HAL requirements

To support MEP for eUICC, implement the following IRadio 2.0 AIDL HAL APIs.


The modem must support the CardStatus API as a response to the getIccCardStatusResponse method. The response must include the port index and the physical slot index specified by SimPortSlotMapping.


The modem must support the SimSlotStatus API as a response to the getSimSlotsStatus method. The SIM slot status includes an array of the SimPortInfo interface, which includes the port index, the ICCID for the enabled profile, and the port state. The modem must return at least two SimPortInfo objects.


The setSimSlotMapping method must pass an array of SimPortSlotMapping. The index of the array is the logical slot and SimPortSlotMapping specifies the corresponding mapped port and physical slot index. The setSimSlotMapping method sets the mapping from ports to logical slots. The LPA app uses this method to select the active port.

APIs supporting MEP for eUICC

Android devices that support multiple enabled profiles as part of the AOSP telephony stack are required to support the following APIs.


  • (Android 13 and higher) isMultipleEnabledProfilesSupported : Returns whether this UICC supports MEP.
  • (Android 13 and higher) getPorts: Returns the list of all possible ports for a particular UICC. If the UICC is a pSIM or eSIM that doesn't support MEP, returns a list of one element.
  • (Deprecated) getIccId: Returns an ICCID. Because a UICC can have more than one ICCID for devices with MEP, use UiccPortInfo.getIccId() instead.

(Android 13 and higher) UiccPortInfo


  • (Android 13 and higher) getPortIndex: Returns the port index on which the subscription is enabled. If the subscription is disabled, returns INVALID_PORT_ID -1.


  • switchToSubscription: Switches to a given subscription. Used by apps that don't have carrier privilege on active subscriptions. When called, the platform internally resolves the port index through a three-choice selection dialog to disable the selected active subscription if there are no available ports. Apps targeting Android 13 and higher must not use this API to disable a subscription by passing an invalid subscription ID; instead they must use the switchToSubscription method (added in Android 13) with the port index specified.
  • (Android 13 and higher) switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): Switches to a given subscription. Calling apps with carrier privilege over the active subscriptions can specify which port to enable the subscription on.
  • (Android 13 and higher) isSimPortAvailable: Returns whether the passing port index is available. A port is available if it has no subscription enabled or the calling app has carrier privilege over the subscription installed on the selected port.


  • (Android 13 and higher) onSwitchToSubscriptionWithPort: Switches to a given subscription on a specified port. LPA implementation must support this on Android 13 and higher.


User interface

To resolve the ambiguity of eSIM port selection, on devices supporting MEP, users must be able to disable one of the active subscriptions to enable a new subscription. In Android 13, AOSP includes a user flow with a three-choice dialog that can be applied to subscription enabling user flows from the Settings app. Figure 4 shows an example of this UX flow.

User flow for MEP SIM subscription

Figure 4. User flow for enabling SIM subscription

Feature flags

To support MEP, devices must declare the following feature flags:

LPA implementation

To support MEP, ensure that your LPA implementation meets the following requirements:

  • Implements the APIs from EuiccService to support multiple ports.
  • Uses the APIs for port selection and profile enabling.
  • Provides UX allowing carriers apps to enable profiles on selected ports.


To test your implementation of the MEP feature, make sure the builds pass the following CTS test cases (for public APIs): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.

Device manufacturers should also work with their modem, eUICC chip, and eSIM OS vendors to ensure that the device can do the following:

  • Two eSIM profiles can be enabled and attached to two different networks.
  • eSIM profiles can be activated and deactivated on any eSIM port.
  • There's a UX flow triggered by the carrier app allowing users to switch profiles.