Android는 Wi-Fi 핫스팟 및 로컬 전용 Wi-Fi 핫스팟을 통한 테더링을 포함하여 Wi-Fi 핫스팟(소프트 AP)을 지원합니다.
소프트 AP 기능을 사용하면 다음과 같은 구성이 가능합니다.
- SSID 및 BSSID
- 보안 유형(WPA3 포함)
- 숨겨진 SSID
- 운영 대역 및 채널(ACS 포함)
- 허용되는 최대 클라이언트 수
- 자동 종료 시간 제한 값
- 연결된 기기의 사용자 제어를 허용하는 허용 목록 및 차단 목록
- AP BSSID의 MAC 무작위 순서 지정 수준
- 802.11ax 및 802.11be
기기 기능에 따라 이러한 제어 항목의 사용 가능 여부가 결정됩니다. Android 11에는 이러한 기능을 가져오는 API가 도입되었습니다. 기기 제조업체는 오버레이를 사용하여 기본 기기 기능을 지정할 수도 있습니다.
일부 API는 시스템 API이며 권한을 통해 제한되므로 시스템의 설정 앱에서만 이러한 API에 액세스할 수 있습니다.
핫스팟 API로 앱 개발
테더링된 Wi-Fi 핫스팟의 기본 구현은 AOSP 설정 앱에서 제공되지만 소프트 AP 구성에 모든 API를 실행하지는 않습니다.
핫스팟 또는 로컬 전용 핫스팟을 통한 테더링을 지원하려면 앱에서 다음 기능을 실행해야 합니다.
테더링된 핫스팟에는
WifiManager#registerSoftApCallback
을 사용하고 로컬 전용 핫스팟에는WifiManager#registerLocalOnlyHotspotSoftApCallback
을 사용하여 기기 기능을 가져오기 위한 콜백을 등록합니다.SoftApCallback
콜백은 다음 메서드를 제공합니다.SoftApCallback#onCapabilityChanged
: 지원되는 최대 클라이언트 수와 SAE 또는 ACS가 지원되는지 여부 등 기기 기능의 정보를 제공합니다.SoftApCallback#onInfoChanged
: 대역 정보와 주파수 정보 등 실행 중인 소프트 AP(시작 시에만 유효함)의 정보를 제공합니다.SoftApCallback#onConnectedClientsChanged
: 연결된 클라이언트 목록을 제공합니다. 각 클라이언트의 MAC 주소를 가져올 수 있습니다. IP 정보를 가져오려면TetheringEventCallback#onClientsChanged
콜백을 사용합니다.SoftApCallback#onStateChanged
: 소프트 AP가 사용 중이거나 사용 중지 상태일 때 소프트 AP 상태에 관한 업데이트를 제공합니다.SoftApCallback#onBlockedClientConnecting
: 차단 사유(기기가 지원할 수 있는 최대 클라이언트 수에 도달함 또는 클라이언트 연결이 명시적으로 승인되지 않음)와 함께 차단된 클라이언트 정보를 제공합니다.
테더링된 핫스팟:
WifiManager#setSoftApConfiguration
메서드를 호출하고SoftApConfiguration
인스턴스를 제공하여 테더링에 사용할 소프트 AP 구성을 설정합니다.SoftApConfiguration.Builder
클래스를 사용하여SoftApConfiguration
을 생성합니다.TetheringManager#startTethering
에서 테더링 메서드를 호출하여 테더링을 시작합니다.
로컬 전용 핫스팟:
WifiManager#startLocalOnlyHotspot
메서드를 호출하여 특정 소프트 AP 구성으로 로컬 전용 핫스팟을 시작합니다.
허용 목록 및 차단 목록 구현
일반적인 이동통신사 요구사항은 소프트 AP에 연결하도록 허용하는 기기 제어권을 사용자에게 제공하는 것입니다. 이를 위한 몇 가지 메커니즘이 있습니다.
SoftApConfiguration.Builder#setMaxNumberOfClients
를 사용하여 소프트 AP에 연결할 수 있는 최대 기기 수를 제한하는 것입니다. 기기에서 지원하는 최대 클라이언트 수보다 적은 수를 지정해야 합니다.SoftApCapability#getMaxSupportedClients
에서 최댓값을 얻을 수 있습니다.허용 목록 및 차단 목록을 사용하여 동적 제어를 제공하는 것입니다.
- 소프트 AP의 기본 구성에서는 모든 기기가 소프트 AP에 연결될 수 있습니다. 단, MAC 주소가
SoftApConfiguration.Builder#setBlockedClientList
에 추가된 기기는 제외됩니다. 소프트 AP가
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
로 구성된 경우 허용 목록이 사용됩니다.- MAC 주소가
SoftApConfiguration.Builder#setBlockedClientList
에 있는 모든 기기는 연결에서 차단됩니다. - MAC 주소가
SoftApConfiguration.Builder#setAllowedClientList
에 있는 모든 기기는 연결이 허용됩니다. - 다른 모든 기기(즉, MAC 주소가 허용 목록 또는 차단 목록에 없는 기기)는 연결이 차단됩니다. 하지만
SoftApCallback#onBlockedClientConnecting
이 호출됩니다. 그러면 제어 앱(즉, 설정 앱)에서 특정 조치를 취하게 됩니다. 예를 들어 사용자에게 확인을 요청하는 메시지를 표시한 다음 사용자의 동작에 따라 기기를 허용 목록 또는 차단 목록에 추가합니다.
- MAC 주소가
허용 목록 기능은 이 기능이 지원되는 기기에서만 사용할 수 있습니다.
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
를 사용하여 기기의 지원 여부를 확인할 수 있습니다.- 소프트 AP의 기본 구성에서는 모든 기기가 소프트 AP에 연결될 수 있습니다. 단, MAC 주소가
구현
핫스팟을 통한 테더링을 지원하거나 로컬 전용 핫스팟을 지원하려면 기기 제조업체가 다음과 같은 설정 앱, 프레임워크 및 HAL/펌웨어 지원을 제공해야 합니다.
설정 앱: AOSP 설정 앱은 SSID 및 보안 사용자 인증 정보로 테더링 핫스팟을 구성하기 위한 기준을 제공합니다. 핫스팟 API로 앱 개발에 설명된 대로 이 코드를 그대로 사용하거나 수정하여 추가 기능을 제공할 수 있습니다.
프레임워크: AOSP 프레임워크 코드는 핫스팟 API로 앱 개발에 설명된 모든 기능을 지원합니다.
핫스팟용 HAL/펌웨어: HIDL IHostapd.hal 버전 1.2 이상 또는 AIDL IHostapd.aidl 중 하나를 제공해야 합니다.
맞춤설정
구현을 맞춤설정하려면 기기 제조업체가 packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
에 설명된 다음과 같은 오버레이 및 이동통신사 구성을 설정해야 합니다.
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: 기본 종료 시간 제한 간격.SoftApConfiguration#setAutoShutdownEnabled
가 사용 설정된 경우에만 유효합니다.SoftApConfiguration#setShutdownTimeoutMillis
를 사용하여 재정의할 수 있습니다.config_wifiHardwareSoftapMaxClientCount
: 지원되는 최대 클라이언트 수의 하드웨어 제한. 기기에서 지원하는 최대 클라이언트 수(CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
로 지정됨)는 하드웨어 및 이동통신사 제약조건의 최솟값입니다. 최종 결과는SoftApCapabilities#getMaxSupportedClients
와 함께 앱에 제공됩니다.config_wifiSofapClientForceDisconnectSupported
: 클라이언트 연결을 강제로 해제하는 기능이 기기에 있는지 여부. 허용 목록 및 차단 목록을 사용 설정하는 데 필요합니다.SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
를 통해 제어 앱(설정 앱)에 전달됩니다.- (13부터 사용 가능)
config_wifiSoftapPassphraseAsciiEncodableCheck
: 소프트 AP 암호가 ASCII로 인코딩되어야 하는지 여부를 나타냅니다. config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: 새 기기가 지원되는 경우 클라우드 구성 복원 중에 대역 설정 구성을 듀얼 대역으로 자동 업그레이드할지 여부를 나타냅니다.- (13부터 사용 가능)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: 공존 처리를 방지하기 위해 프레임워크에서 대역 구성에 낮은 대역을 자동으로 추가하는지 여부를 나타냅니다. config_wifiSoftApDynamicCountryCodeUpdateSupported
: 기기에서 AP 모드의 동적 국가 코드 업데이트가 지원되는지 여부를 나타냅니다.- 채널 지원:
config_wifiSoftap2gChannelList
,config_wifiSoftap5gChannelList
,config_wifiSoftap6gChannelList
,config_wifiSoftap60gChannelList
- 핫스팟 구성을 새 기기로 복원할 때 관련 항목(
config_wifiSoftapResetChannelConfig
,config_wifiSoftapResetHiddenConfig
,config_wifiSoftapResetUserControlConfig
,config_wifiSoftapResetAutoShutdownTimerConfig
,config_wifiSoftapResetMaxClientSettingConfig
)을 기본값으로 재설정할지 지정하여 지원을 복원합니다. 이러한 값은 기본적으로true
로 설정됩니다. 즉, 값이 재설정되는 것입니다. 이는 새 기기가 관련 구성을 지원하지 않는 경우에 중요합니다. - 하드웨어 기능:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (13부터 사용 가능)
config_wifiSoftapOweTransitionSupported
- (13부터 사용 가능)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (13부터 사용 가능)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
유효성 검사
Android는 핫스팟 기능의 유효성을 검사하기 위해 일련의 단위 테스트, 통합 테스트(Android 연결 테스트 모음, 즉 ACTS) 및 호환성 테스트 모음(CTS) 테스트를 제공합니다. 핫스팟 기능은 공급업체 테스트 모음(VTS)을 사용하여 테스트할 수도 있습니다.
단위 테스트
다음 테스트를 사용하여 핫스팟 패키지의 유효성을 검사합니다.
서비스 테스트:
atest packages/modules/Wifi/service/tests/wifitests/
관리자 테스트:
atest packages/modules/Wifi/framework/tests/
통합 테스트(ACTS)
tools/test/connectivity/acts_tests/tests/google/wifi/WifiSoftApTest.py
에 있는 ACTS 핫스팟 테스트 모음은 핫스팟 기능의 기능별 테스트를 구현합니다.
호환성 테스트 모음(CTS) 테스트
핫스팟 기능의 유효성을 검사하려면 CTS 테스트를 사용합니다. CTS는 기능이 사용 설정되면 설정을 감지하고 관련 테스트를 자동으로 포함합니다.
CTS 테스트를 트리거하려면 다음을 실행합니다.
atest android.net.wifi.cts.WifiManagerTest
공급업체 테스트 모음(VTS)
HIDL 인터페이스가 구현된 경우 다음을 실행합니다.
atest VtsHalWifiHostapdV1_2Target
AIDL 인터페이스가 구현된 경우 다음을 실행합니다.
atest VtsHalHostapdTargetTest