Для устройств под управлением Android 13 и выше Android поддерживает несколько профилей активации (MEP) для eUICC. Эта функция позволяет устройствам использовать две SIM-карты с помощью одного чипа eSIM, который может иметь несколько профилей SIM-карт и одновременно подключаться к двум разным операторам связи. Производители устройств должны сотрудничать с поставщиками SoC и производителями чипсетов eSIM для интеграции этой функции в свои устройства.
Фон
На устройствах под управлением Android 12 и более ранних версий AOSP предоставляет ограниченную поддержку, позволяя одной eSIM-карте одновременно поддерживать несколько профилей. Несмотря на значительную экономию места и средств, которую обеспечивает eSIM, отсутствие поддержки двух SIM-карт препятствует производителям устройств внедрять устройства только с eSIM. Для обеспечения поддержки двух SIM-карт на устройстве только с eSIM производителям приходится размещать в нем два элемента eSIM, что увеличивает стоимость комплектующих и приводит к ухудшению пользовательского опыта при управлении подписками. Функция MEP, доступная в AOSP начиная с Android 13, решает эту проблему.
архитектура eUICC
В этом разделе описывается архитектура чипа eSIM для устройств с поддержкой MEP для различных версий Android, а также архитектура чипа eSIM для устройств без поддержки MEP.
Android 14
Для устройств под управлением Android 14 и выше Android поддерживает варианты MEP-A1 и MEP-B для выбора корневого домена безопасности эмитента (ISD-R) и выбора портов eSIM в соответствии со спецификацией GSMA SGP V22 3.0 . Ниже описаны модели выбора ISD-R MEP-A1 и MEP-B:
MEP-A1: ISD-R выбирается на порту 0 (порт команд — 0), а профили выбираются на портах eSIM 1 и выше. Команды ES10 всегда отправляются на порт 0, при этом порт команд и целевой порт всегда разные. LPA выбирает порт.

Рисунок 1. Модель отбора MEP-A1 ISD-R
MEP-B: ISD-R выбирается на любом порту, и любому порту может быть назначен профиль. Команды включения и выключения отправляются на порт, где необходимо включить или выключить профиль (если ожидается обновление). Порт команды и целевой порт всегда одинаковы.

Рисунок 2. Модель выбора MEP-B ISD-R
Android 13
В Android 13 и выше, на устройствах, поддерживающих MEP, слот eSIM содержит несколько портов eUICC, каждый из которых может иметь включенный профиль. Как показано на рисунке 3, при такой архитектуре один eUICC (один физический слот) поддерживает режим ожидания двух SIM-карт (DSDS), поскольку каждый порт eUICC подключен к базовой полосе модема. HAL и API Android 13 не зависят от варианта MEP.

Рисунок 3. Архитектура чипа eSIM с поддержкой MEP (Android 13 или выше)
Android 12 и ниже
На устройствах под управлением Android 12 или более ранних версий без MEP, как показано на рисунке 4, слот eSIM поддерживает только один активный профиль одновременно. Это означает, что устройство не может поддерживать DSDS.

Рисунок 4. Архитектура чипа eSIM без поддержки MEP (Android 12 или ниже)
Поток информации API для нескольких включенных профилей
На рисунке 5 описан поток информации для MEP для eUICC в Android 13. В структуру телефонии входит класс UiccPort , представляющий физическую структуру eUICC. Класс UiccPort используется для всех типов SIM-карт: физических SIM-карт (pSIM), интегрированных SIM-карт (iSIM) и встроенных SIM-карт (eSIM). Для eUICC с несколькими портами один объект UiccSlot и один объект UiccCard соответствуют нескольким экземплярам UiccPort . Каждый экземпляр UiccPort может быть связан максимум с одним экземпляром UiccProfile . Такой поток позволяет UiccPort соответствовать логическому слоту, а UiccSlot (физический слот) — нескольким логическим слотам.

Рисунок 5. Информационный поток для eUICC при поддержке MEP.
Выполнение
В этом разделе описывается, как реализовать функцию MEP, включая подробности о требованиях HAL, API и пользовательском интерфейсе. Производителям устройств следует сотрудничать с поставщиками SoC и поставщиками чипсетов eSIM для поддержки MEP.
Требования HAL
Для поддержки MEP для eUICC необходимо реализовать следующие API IRadio AIDL HAL, расположенные в /platform/hardware/interfaces/radio/aidl/aidl_api .
Устройства под управлением Android 14 или выше должны использовать интерфейсы HAL версии IRadio 2.1, которые используют MultipleEnabledProfileMode (модель выбора ISD-R, поддерживаемая модемом или eUICC) и передают информацию команд ES10 APDU во время работы с логическим каналом ICC.
CardStatus
Модем должен поддерживать API CardStatus в качестве ответа на метод getIccCardStatusResponse . Ответ должен включать индекс порта и индекс физического слота, указанные в SimPortSlotMapping .
Для устройств под управлением Android 14 или более поздней версии модем должен передавать все события CardStatus в поддерживаемом режиме MEP .
SimSlotStatus
Модем должен поддерживать API SimSlotStatus в качестве ответа на метод getSimSlotsStatus . Статус слота SIM-карты включает массив интерфейса SimPortInfo , содержащий индекс порта, ICCID для включенного профиля и состояние порта. Модем должен возвращать как минимум два объекта SimPortInfo .
Для устройств под управлением Android 14 или более поздней версии модем должен передавать все события CardStatus в поддерживаемом режиме MEP .
setSimSlotMapping
Метод setSimSlotMapping должен передавать массив объектов SimPortSlotMapping . Индекс массива — это логический слот, а SimPortSlotMapping указывает соответствующий отображаемый порт и индекс физического слота. Метод setSimSlotMapping устанавливает сопоставление портов с логическими слотами. Приложение LPA использует этот метод для выбора активного порта.
API, поддерживающие MEP для eUICC
Для работы устройств Android, поддерживающих несколько включенных профилей в рамках стека телефонии AOSP, необходимы следующие API.
UiccCardInfo
- (Android 13 и выше)
isMultipleEnabledProfilesSupported: Возвращает значение, указывающее, поддерживает ли данный UICC протокол MEP. - (Android 13 и выше)
getPorts: Возвращает список всех возможных портов для конкретного UICC. Если UICC — это pSIM или eSIM, не поддерживающая MEP, возвращает список из одного элемента. - (Устарело)
getIccId: Возвращает ICCID. Поскольку UICC может иметь более одного ICCID для устройств с MEP, используйте вместо негоUiccPortInfo.getIccId().
(Android 13 и выше) UiccPortInfo
-
getIccId: Возвращает ICCID, если на этом порту активна подписка. -
getPortIndex: Возвращает индекс порта. -
getLogicalSlotIndex: Возвращает индекс активного логического модемного стека.
Информация о подписке
- (Android 13 и выше)
getPortIndex: Возвращает индекс порта, на котором включена подписка. Если подписка отключена, возвращаетINVALID_PORT_ID -1.
EuiccManager
-
switchToSubscription: Переключает на заданную подписку. Используется приложениями, не имеющими привилегий оператора связи на активные подписки. При вызове платформа внутренне определяет индекс порта через диалоговое окно с тремя вариантами выбора, чтобы отключить выбранную активную подписку, если нет доступных портов. Приложения, ориентированные на Android 13 и выше, не должны использовать этот API для отключения подписки путем передачи недействительного идентификатора подписки ; вместо этого они должны использовать методswitchToSubscription(добавленный в Android 13) с указанием индекса порта. - (Android 13 и выше)
switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): Переключает на заданную подписку. Приложения, имеющие права оператора связи на активные подписки, могут указать, на каком порту следует включить подписку. - (Android 13 и выше)
isSimPortAvailable: Возвращает значение, указывающее на доступность указанного порта. Порт доступен, если для него не включена подписка или если вызывающее приложение имеет привилегии оператора связи в отношении подписки, установленной на выбранном порту.
EuiccService
- (Android 13 и выше)
onSwitchToSubscriptionWithPort: Переключает на заданную подписку на указанном порту. Реализация LPA должна поддерживать это в Android 13 и выше.
TelephonyManager
- (Android 13 и выше)
getSimApplicationState: Возвращает константу, указывающую состояние приложения карты. Этот API передает как индекс физического слота, так и индекс порта. МетодgetSimApplicationState(int physicalSlotIndex)(устаревший) передает только индекс физического слота для получения объектаsimApplicationState. - (Android 13 и выше)
setSimSlotMapping(Collection<UiccSlotMapping> slots): Сопоставляет логические слоты с физическими слотами и портами. - (Android 13 и выше)
Collection<UiccSlotMapping> getSimSlotMapping: Получает сопоставление логических слотов с физическими слотами для SIM-карт и индексами портов.
Пользовательский интерфейс
Для устранения неоднозначности выбора порта eSIM на устройствах, поддерживающих MEP, пользователям необходимо иметь возможность отключить одну из активных подписок, чтобы включить новую. В Android 13 AOSP включает пользовательский сценарий с диалогом из трех вариантов, который можно применять к сценариям включения подписок из приложения «Настройки». На рисунке 6 показан пример такого пользовательского сценария.

Рисунок 6. Схема взаимодействия пользователя при включении SIM-карты.
Флаги функций
Для поддержки MEP устройства должны объявлять следующие флаги функций:
Реализация LPA
Для поддержки MEP убедитесь, что ваша реализация LPA соответствует следующим требованиям:
- Реализует API-интерфейсы EuiccService для поддержки нескольких портов.
- Использует API для выбора портов и включения профилей.
- Предоставляет пользовательский интерфейс, позволяющий приложениям операторов связи активировать профили на выбранных портах.
Проверка
Чтобы проверить вашу реализацию функции MEP, убедитесь, что сборки проходят следующие тестовые случаи CTS (для общедоступных API): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts .
Производителям устройств также следует сотрудничать со своими поставщиками модемов, микросхем eUICC и операционных систем eSIM, чтобы подтвердить, что устройство способно выполнять следующие функции:
- Можно активировать два профиля eSIM и подключить их к двум разным сетям.
- Профили eSIM можно активировать и деактивировать на любом порту eSIM.
- Приложение оператора связи запускает пользовательский интерфейс, позволяющий пользователям переключать профили.
Рекомендации для перевозчиков
Чтобы гарантировать бесперебойную работу сервиса при переносе профилей eSIM с одного порта на другой, мы рекомендуем операторам связи обеспечить поддержку следующих услуг:
- Картирование жидкостей IMEI и SIM
- Для каждого идентификатора eUICC (EID) используется несколько ICCID или SIM-карт.