Android 13 이상을 실행하는 기기의 경우 Android는 eUICC에서 다중 지원 프로필(MEP)을 지원합니다. 이 기능을 사용하면 기기에서 단일 eSIM 칩을 사용하여 듀얼 SIM을 지원할 수 있습니다. 그러면 여러 개의 SIM 프로필을 갖고 동시에 두 개의 이동통신사에 연결할 수 있습니다. 기기 제조업체는 SoC 공급업체 및 eSIM 칩셋 공급업체와 협력하여 기기에 이 기능을 통합해야 합니다.
배경
Android 12 이하를 실행하는 기기에서 AOSP는 단일 eSIM이 동시에 여러 프로필을 지원할 수 있도록 제한적으로 지원합니다. eSIM이 상당한 공간 및 비용을 절감함에도 듀얼 SIM을 지원하지 않기 때문에 기기 제조업체는 eSIM 전용 기기를 채택하지 못합니다. eSIM 전용 기기에서 듀얼 SIM 지원을 제공하려면 기기 제조업체가 두 개의 eSIM 요소를 기기에 적용해야 합니다. 이렇게 하면 재료명세서(BOM) 비용이 증가하고 구독 관리 사용자 환경이 저하됩니다. Android 13의 AOSP에서 사용할 수 있는 MEP 기능은 이 문제를 해결합니다.
eUICC 아키텍처
이 섹션에서는 다양한 Android 버전용 MEP가 있는 기기의 eSIM 칩 아키텍처와 MEP가 없는 기기의 eSIM 칩 아키텍처를 설명합니다.
Android 14
Android 14 이상을 실행하는 기기의 경우 Android는 GSMA SGP V22 3.0에 명시된 대로 발급기관 보안 도메인 루트(ISD-R) 선택과 eSIM 포트 선택을 위한 MEP-A1과 MEP-B 옵션을 지원합니다. 다음은 MEP-A1과 MEP-B ISD-R 선택 모델을 설명합니다.
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(단일 물리적 슬롯)가 각 eUICC 포트를 모뎀 베이스밴드에 연결하여 듀얼 SIM 듀얼 대기(DSDS)를 지원합니다. Android 13 HAL 및 API는 MEP 변형에 독립적입니다.
그림 3. MEP를 지원하는 eSIM 칩 아키텍처(Android 13 이상)
Android 12 및 이전 버전
그림 4와 같이 MEP가 없는 Android 12 이하를 실행하는 기기의 경우 eSIM 슬롯은 한 번에 사용 설정된 프로필을 하나만 지원하며 기기는 DSDS를 지원하지 않습니다.
그림 4. MEP를 지원하지 않는 eSIM 칩 아키텍처(Android 12 및 이전 버전)
다중 지원 프로필의 API 정보 흐름
그림 5에서는 Android 13의 eUICC용 MEP 정보 흐름을 보여줍니다. 전화 통신 프레임워크에는 eUICC의 물리적 구조를 나타내는 UiccPort
클래스가 있습니다. UiccPort
클래스는 물리적 SIM(pSIM), 통합 SIM(iSIM), 임베디드 SIM(eSIM)과 같은 모든 유형의 SIM 카드에서 사용됩니다. 다중 포트가 있는 eUICC의 경우 단일 UiccSlot
객체와 UiccCard
객체가 여러 UiccPort
인스턴스에 매핑됩니다. 각 UiccPort
인스턴스는 최대 1개의 UiccProfile
인스턴스에 연결될 수 있습니다. 이 흐름에서는 UiccPort
가 하나의 논리 슬롯에 매핑되고 UiccSlot
(물리적인 슬롯)이 여러 개의 논리 슬롯에 매핑될 수 있습니다.
그림 5. MEP를 지원하는 eUICC 정보 흐름
구현
이 섹션에서는 HAL 요구사항, API, 사용자 인터페이스에 관한 세부정보를 비롯하여 MEP 기능을 구현하는 방법을 설명합니다. 기기 제조업체는 SoC 공급업체 및 eSIM 칩셋 공급업체와 협력하여 MEP를 지원해야 합니다.
HAL 요구사항
eUICC용 MEP를 지원하려면 /platform/hardware/interfaces/radio/aidl/aidl_api
에 있는 다음 IRadio AIDL HAL API를 구현하세요.
Android 14 이상을 실행하는 기기는 MultipleEnabledProfileMode
(모뎀 또는 eUICC에서 지원되는 ISD-R 선택 모델)를 사용하고 ICC 논리 채널 작업 중에 ES10 APDU 명령어 정보를 전달하는 HAL 인터페이스의 IRadio 2.1 버전을 사용해야 합니다.
CardStatus
모뎀은 getIccCardStatusResponse
메서드에 대한 응답으로 CardStatus
API를 지원해야 합니다. 응답은 SimPortSlotMapping
에 지정된 포트 인덱스와 물리적인 슬롯 인덱스를 포함해야 합니다.
Android 14 이상을 실행하는 기기의 경우 모뎀은 모든 CardStatus 이벤트와 함께 지원되는 MEP 모드를 전달해야 합니다.
SimSlotStatus
모뎀은 getSimSlotsStatus
메서드에 대한 응답으로 SimSlotStatus
API를 지원해야 합니다. SIM 슬롯 상태는 포트 인덱스, 사용 설정된 프로필의 ICCID 및 포트 상태를 포함하는 SimPortInfo
인터페이스 배열을 포함합니다. 모뎀은 둘 이상의 SimPortInfo
객체를 반환해야 합니다.
Android 14 이상을 실행하는 기기의 경우 모뎀은 모든 CardStatus 이벤트와 함께 지원되는 MEP 모드를 전달해야 합니다.
setSimSlotMapping
setSimSlotMapping
메서드는 SimPortSlotMapping
의 배열을 전달해야 합니다.
배열의 인덱스는 논리 슬롯이며, SimPortSlotMapping
은 상응하는 매핑된 포트와 물리적인 슬롯 인덱스를 지정합니다. setSimSlotMapping
메서드는 포트에서 논리 슬롯으로의 매핑을 설정합니다. LPA 앱은 이 메서드를 사용하여 활성 포트를 선택합니다.
eUICC용 MEP를 지원하는 API
AOSP 전화 스택의 일부로 다중 지원 프로필을 지원하는 Android 기기는 다음 API를 지원해야 합니다.
UiccCardInfo
- (Android 13 이상)
isMultipleEnabledProfilesSupported
: 이 UICC가 MEP를 지원하는지 여부를 반환합니다. - (Android 13 이상)
getPorts
: 특정 UICC용으로 가능한 모든 포트 목록을 반환합니다. UICC가 MEP를 지원하지 않는 pSIM 또는 eSIM인 경우 요소 한 개의 목록을 반환합니다. - (지원 중단됨)
getIccId
: ICCID를 반환합니다. UICC는 MEP를 지원하는 기기에서 둘 이상의 ICCID를 가질 수 있으므로 대신UiccPortInfo.getIccId()
를 사용합니다.
(Android 13 이상) UiccPortInfo
getIccId
: 이 포트에 사용 설정된 구독이 있는 경우 ICCID를 반환합니다.getPortIndex
: 포트 인덱스를 반환합니다.getLogicalSlotIndex
: 활성 논리 모뎀 스택 인덱스를 반환합니다.
SubscriptionInfo
- (Android 13 이상)
getPortIndex
: 구독이 사용 설정된 포트 인덱스를 반환합니다. 구독이 사용 중지되면INVALID_PORT_ID -1
을 반환합니다.
EuiccManager
switchToSubscription
: 지정된 구독으로 전환합니다. 활성 구독에 이동통신사 권한이 없는 앱에서 사용됩니다. 호출되면 플랫폼은 사용 가능한 포트가 없는 경우 3가지 옵션 선택 대화상자를 통해 내부적으로 포트 인덱스를 확인하여 선택된 활성 구독을 사용 중지합니다. Android 13 이상을 타겟팅하는 앱은 이 API를 사용하여 잘못된 구독 ID를 전달하는 방식으로 구독을 사용 중지하는 대신 포트 인덱스가 지정된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에는 설정 앱에서 사용자 흐름을 사용 설정하도록 구독에 적용할 수 있는 3가지 옵션 대화상자가 있는 사용자 흐름이 있습니다. 그림 6에서는 이 UX 흐름의 예를 보여줍니다.
그림 6. SIM 구독 사용 설정 사용자 흐름
기능 플래그
MEP를 지원하려면 기기가 다음 기능 플래그를 선언해야 합니다.
LPA 구현
MEP를 지원하려면 LPA 구현이 다음 요구사항을 충족해야 합니다.
- 여러 포트를 지원하도록 EuiccService의 API를 구현합니다.
- API를 사용하여 포트를 선택하고 프로필을 사용 설정합니다.
- 이동통신사 앱이 선택한 포트에서 프로필을 사용 설정할 수 있도록 지원하는 UX를 제공합니다.
유효성 검사
MEP 기능의 구현을 테스트하려면 빌드가 (공개 API의 경우) 다음 CTS 테스트 사례를 통과해야 합니다(/platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
).
기기 제조업체는 모뎀, eUICC 칩, eSIM OS 공급업체와 협력하여 기기가 다음을 실행할 수 있도록 해야 합니다.
- 두 개의 eSIM 프로필을 사용 설정하여 두 개의 서로 다른 네트워크에 연결할 수 있습니다.
- eSIM 포트에서 eSIM 프로필을 사용 설정 및 사용 중지할 수 있습니다.
- 이동통신사 앱에서 트리거되어 사용자가 프로필을 전환할 수 있는 UX 흐름이 있습니다.
이동통신사 권장사항
eSIM 프로필을 한 프로필에서 다른 프로필로 옮길 때 사용자가 서비스를 잃지 않도록 하려면 이동통신사에서 다음을 지원하는 것이 좋습니다.
- IMEI 및 SIM의 유연한 매핑
- 각 eUICC 식별자(EID)의 여러 ICCID 또는 SIM