이 페이지에서는 Android 10 출시에 포함된 주요 기능을 요약하고 추가 정보 링크를 제공합니다. 이 기능 요약은 이 사이트의 기능 문서 위치에 따라 구성됩니다.
빌드
java_sdk_library
Android 10에는 공유 자바 라이브러리의 호환성 문제 해결을 위한 새로운 빌드 규칙인 java_sdk_library
가 도입되었습니다. 기기 제조업체에서는 이러한 메커니즘을 자체 공유 자바 라이브러리에 사용하여 자체 API의 하위 호환성을 유지할 수 있습니다.
아키텍처
모듈식 시스템 구성요소
Android 10은 일부 Android 시스템 구성요소를 모듈화하여 일반적인 Android 출시 주기 외에도 업데이트될 수 있도록 지원합니다. 일부 모듈에는 다음이 포함됩니다.
- Android 런타임
- Conscrypt
- DNS 리졸버
- DocumentsUI
- ExtServices
- 미디어
- ModuleMetadata
- 네트워킹
- PermissionController
- 시간대 데이터
하드웨어 추상화 계층(HAL)
Android 10은 더 많은 지원을 추가하여 HAL이 클라이언트가 없을 때 자동으로 종료되도록 합니다.
커널
ABI
Android 10에서는 커널 모듈과의 호환성에 영향을 주는 커널 ABI 변경사항을 비교, 추적하고 변경사항이 미치는 영향을 완화하도록 돕는 새로운 ABI 모니터링 유틸리티가 지원됩니다.
Android 10에는 기호 기반의 ABI 사용 검사기도 도입되었습니다. 검사기는 오래 전에 사전 빌드된 바이너리를 빌드 시간에 감지할 수 있습니다. 따라서 공유 라이브러리 개발자는 어떤 사전 빌드된 바이너리가 자체 변경사항에 의해 손상되었는지, 어떤 사전 빌드된 바이너리를 다시 빌드해야 하는지 알 수 있습니다.
Android Live-Lock 데몬
Android 10에는 커널 교착 상태를 포착하고 완화하도록 설계된 Android Live-Lock 데몬(llkd)이 포함되어 있습니다.
ARM64의 vDSO32
Android 10은 배터리 수명이 0.4% 증가하는 등 성능이 향상되는 64비트 커널의 vDSO32 사용을 지원합니다.
초기에 마운트된 파티션의 fstab 항목
Android 10에서는 기기가 첫 번째 스테이지 ramdisk에서 fstab
파일을 사용하여 초기에 마운트된 파티션의 fstab
항목을 지정해야 합니다.
HIDL
오프로드 BroadcastQueue
Android 10에는 기존 백그라운드 및 포그라운드 대기열에 대한 새로운 오프로드 BroadcastQueue
가 포함됩니다. 오프로드 대기열은 백그라운드 대기열과 동일한 우선순위 및 시간 제한 동작을 가집니다. 더 흥미롭거나 사용자에게 표시되는 브로드캐스트가 발생하는 백그라운드 대기열이 차단되는 것을 방지하기 위해 오프로드 대기열은 많은 앱이 듣고 완료하는 데 시간이 오래 걸릴 수 있는 BOOT_COMPLETED
브로드캐스트를 처리합니다.
현재 오프로드 대기열은 BOOT_COMPLETED
브로드캐스트만 처리하지만 다른 긴 브로드캐스트도 처리할 수 있는 가능성이 있습니다.
SystemSuspend 서비스
Android 10은 시스템 정지를 담당하는 libsuspend
의 스레드가 SystemSuspend HIDL 서비스를 대체합니다. 이 구현은 Android HIDL 인프라의 이점을 활용하면서 이전 버전과 동일한 기능을 제공합니다.
HIDL의 safe_union
Android 10에는 HIDL의 명시적으로 태그 지정된 유니온 유형인 safe_union
이 도입되었습니다.
구성
ConfigStore HAL
Android 10은 메모리 소비가 높고 사용이 어려운 ConfigStore HAL을 지원 중단하고 HAL을 시스템 속성으로 대체합니다.
Config File Schema API
Android 플랫폼에는 구성 데이터를 저장하기 위한 많은 XML 파일이 포함되어 있습니다. 대부분의 XML 파일은 vendor
파티션에 있지만 읽기는 system
파티션에서 이루어집니다. 이 경우 XML 파일의 스키마가 두 파티션의 인터페이스로 기능합니다. 따라서 스키마는 명시적으로 지정되어야 하며 하위 호환 가능한 방식으로 진화해야 합니다. Android 10 이전에는 플랫폼에서 XML 스키마 지정 및 사용을 요구하거나 스키마에서 호환되지 않는 변경사항을 방지하기 위한 메커니즘을 제공하지 않았습니다. Android 10에서는 이러한 메커니즘을 제공하며, 이를 Config File Schema API라고 부릅니다.
API로서의 시스템 속성
파티션 전체에 걸쳐 액세스된 시스템 속성이 sysprop
설명 파일로 도식화되며, 속성 액세스를 위한 API가 C++ 및 자바 클래스의 확정 함수로 생성됩니다.
공급업체 인터페이스(VINTF) 객체
VINTF
Android 10의 VINTF 변경사항은 다음과 같습니다.
- AVB 버전 태그 지원 중단
- OTA 패키지에 커널 정보 추가
- 공식적으로 ODM 매니페스트 빌드
- 제품 호환성 매트릭스 추가
- 빌드 시스템에서 매니페스트 항목을 HAL 모듈에 연결
부트로더
램디스크
Android 10에서 루트 파일 시스템은 더 이상 ramdisk.img
에 포함되지 않고 system.img
로 병합되었습니다.
ODM 파티션 빌드
Android 10은 Android 빌드 시스템을 사용하여 odm
파티션 빌드를 지원합니다. 별도의 맞춤설정을 위해 /odm
파티션을 사용하여 여러 하드웨어 SKU에 대해 단일 공급업체 이미지를 사용할 수 있습니다. 이를 통해 독창적인 설계 제조업체(ODM)는 단일 칩 시스템(SoC) 공급업체 보드 서포트 패키지를 특정 기기(기기의 보드)에 맞춰 맞춤설정할 수 있습니다. 보드별 구성요소, 보드별 데몬 또는 HAL(Hardware Abstraction Layer)의 자체 기능에 관련된 커널 모듈을 구현할 수 있습니다. SoC 구성요소를 대체하거나 맞춤설정할 수도 있습니다.
부팅 이미지 헤더 버전 관리
Android 10은 부팅 이미지 헤더를 기기 트리 blob(DTB) 이미지를 저장하는 섹션을 포함하는 버전 2로 업데이트합니다. Android 10 VTS 테스트는 Android 10에서 실행되는 모든 기기가 부팅 이미지 헤더 버전 2를 사용하고 부팅/복구 이미지의 일부로 유효한 DTB 이미지를 포함하는지 확인합니다.
A/B 이외 기기의 복구 이미지
Android 9 이상에서는 기기의 복구 이미지에 오버레이 이미지의 정보가 포함되어야 합니다. 기기 제조업체는 DeviceTree 또는 ACPI(Advanced Configuration and Power Interface)를 사용하여 검색할 수 없는 모든 기기를 설명할 수 있습니다. Android 10 이상은 오버레이용 DeviceTree blob(DTBO) 대신 ACPI를 사용하는 아키텍처를 지원합니다.
안정적 AIDL
Android 10에는 Android 인터페이스 정의 언어(AIDL) 인터페이스에서 제공하는 애플리케이션 프로그래밍 인터페이스(API)/Application Binary Interface(ABI)를 추적할 수 있는 새로운 방법인 안정적인 AIDL에 대한 지원이 추가되었습니다.
빠른 부팅을 사용자 공간으로 이동
Android 10에는 빠른 부팅 구현을 부트로더에서 사용자 공간으로 재배치하여 크기를 조절할 수 있는 파티션에 대한 지원이 추가되었습니다.
디스플레이
HDR 동영상 재생
Android 10은 HDR10, VP9, HDR10+ 재생을 지원합니다.
텍스트 분류
텍스트 분류는 개발자가 텍스트를 쉽게 분류할 수 있도록 머신러닝 기술을 사용합니다. Android 10의 TextClassifier API에 두 가지 메서드(suggestConversationActions
및 detectLanguage
)가 도입되었습니다.
suggestConversationActions
메서드는 특정 대화에서 추천 답변 및 작업을 생성하며, detectLanguage
메서드는 텍스트 언어를 감지합니다.
Zawgyi 글꼴 렌더링 지원
Zawgyi는 미얀마에서 가장 많이 사용되는 글꼴로, Android 9 이하에서는 유니코드와 호환되지 않아 Zawgyi 렌더링을 지원하지 않았습니다. Android 10에서는 유니코드 버마어와 Zawgyi를 함께 렌더링할 수 있는 유니코드 글꼴을 포함하여 이 문제를 해결합니다. Android 10을 실행하는 기기에서 Zawgyi 글꼴 렌더링을 지원하기 위한 구현 작업은 필요하지 않습니다. 기기에 Zawgyi를 지원하는 맞춤 구현이 있는 경우 다음을 할 수 있습니다.
- 변경사항을 되돌리고 플랫폼 지원 메서드를 사용합니다.
- 일반적인 Zawgyi 글꼴을 시스템에 유지하고
fonts.xml
에서 지역 코드my-qaag
를 사용합니다. 자세한 내용은 Zawgyi(Qaag)의 유니코드 CLDR 출시 노트를 참조하세요.
앱 아이콘 숨기기 제한사항
Android 10에서는 앱이 런처 아이콘을 숨기는 기능을 제한합니다. 앱에 런처 활동이 사용 설정되어 있지 않으면 시스템에서 런처에 합성된 활동을 표시합니다. 이 합성 활동은 시스템 설정 내의 앱 세부정보 페이지를 나타냅니다.
앱 아이콘이 표시되지 않는 앱 유형을 포함하여 앱 아이콘을 표시하는 데 사용된 로직에 관한 자세한 내용은 API 참조에서 getActivityList()
관련 문서를 참고하시기 바랍니다.
설정
접근성을 개선하기 위해 Android 10에는 사용자 맞춤설정 가능한 시간 제한 설정이 포함되어 있습니다. 관련 API 및 설정 변경사항은 Android 10부터 제공됩니다. 설정을 맞춤설정하는 경우 이 기능이 지원되는지 확인하세요. UI 요소가 기기에서 시간이 초과되었다면 시간 초과 API를 사용하세요. 자세한 내용은 Android 개발자 접근성 가이드라인을 참조하세요.
호환성
Android 호환성 정의 문서(CDD)
Android 10 호환성 정의 문서는 새로운 기능 및 이전에 출시된 기능의 요구사항에 대한 변경 내용이 있는 이전 버전을 반복합니다.
테스트
호환성 테스트 모음(CTS)
Android CTS에는 Android 10의 여러 주요 변경 사항이 나열된 별도의 출시 노트 페이지가 있습니다.
CTS 다운로드
Android 10을 지원하는 CTS 패키지는 CTS 다운로드 페이지에서 제공됩니다. 포함된 테스트의 소스 코드는 오픈소스 트리의 android-cts-10_r1
태그와 동기화할 수 있습니다.
CTS shim APEX
Android 10에는 APEX 관리용 CTS 테스트를 작성하기 위해 CtsShimApex
패키지가 사전 설치되어 있어야 합니다.
테스트 하네스 모드
CTS 테스트 하네스 모드는 개발자가 기기 또는 여러 기기의 테스트를 자동화하는 데 도움이 됩니다.
인스턴트 앱 모드
Android 10부터 CTS는 인스턴트 앱으로 테스트 APK를 설치하고 테스트를 실행하는 인스턴트 앱 모드에서 실행됩니다.
인스턴트 앱용 CTS 모드 외에도 Android 10에는 인스턴트 앱용 CTS 인증 프로그램이 포함되어 있습니다.
CTS 인증기 프로 오디오 테스트
Android 10에는 프로 오디오 준수를 위한 CTS 인증기 테스트가 추가되어 있습니다.
CTS 인증기 MIDI 테스트
Android 10에서는 CTS 인증기 MIDI 테스트가 USB MIDI 인터페이스, 블루투스 MIDI 인터페이스, 가상 MIDI 기기 경로를 사용하여 MIDI 기능을 테스트합니다.
CTS 테스트 해석
Android 10은 CTS 결과 해석 메커니즘을 업데이트합니다.
공급업체 테스트 모음(VTS)
디버그 ramdisk를 사용한 VTS 테스트
Android 10에서는 GSI가 출시 서명되었기 때문에 CSI-on-GSI/VTS 준수 테스트를 실행하는 데 사용되는 일반 시스템 이미지(GSI)는 userdebug에서 user build 유형으로 변경되었습니다. 그러나 테스트 중인 Android 기기에 대한 호스트 루트 권한을 제공하는 adb root
명령은 사용자 빌드에서 사용할 수 없습니다. VTS를 실행하려면 adb root
가 필요하기 때문에 발생하는 문제입니다.
디버그 ramdisk는 기기가 잠금 해제된 경우에 adb root
를 가능하게 하기 위해 도입되었습니다. 이렇게 하면 동일한 사용자 빌드 system.img
(GSI 또는 OEM의 system.img
)를 재사용하여 테스트 플로우를 간소화할 수 있습니다.
Hardware Composer 유효성 검사
Android 10은 Hardware Composer 유효성 검사를 위한 새로운 VTS 테스트 클래스를 IComposerClient.hal
의 readback
인터페이스를 통해 추가합니다.
공급업체가 readback
을 구현하지 않는 경우 테스트는 자동으로 통과됩니다.
디버깅
다른 클래스 로더로 공유 라이브러리 로드
Android 9 및 이전 버전에서 앱은 앱의 클래스 로더에 연결된 Java 공유 라이브러리를 로드했습니다. Android 10에서 프레임워크는 앱의 클래스 로더와 다른 클래스 로더를 사용하여 uses-library
또는 uses-static-library
를 통해 연결된 자바 공유 라이브러리를 로드합니다.
일반적으로 앱은 특정 클래스 로더를 사용하지 않아야 하므로 앱 동작은 중단되지 않아야 합니다. 그러나 앱이 단일 클래스 로더를 사용하는 경우 작동이 중단됩니다. 또한 동일한 패키지의 클래스에 대한 패키지 비공개 가시성은 계속 지원되지만 공유 라이브러리에서는 지원되지 않습니다.
기기 제조업체는 Android 10을 실행하는 기기를 테스트할 때 앱 호환성 문제를 겪을 수 있습니다.
보안 기능
보안 및 개인 정보 보호와만 관련된 개선사항의 전체 목록은 Android 10의 보안 및 개인 정보 보호 개선사항 페이지를 참고하세요.
얼굴 인증
얼굴 인증을 사용하면 기기 전면을 바라보는 것으로 기기를 잠금 해제할 수 있습니다. Android 10은 카메라 프레임을 안전하게 처리할 수 있는 새로운 얼굴 인증 스택을 추가적으로 지원하여 지원되는 하드웨어에서 얼굴 인증 시 보안을 유지하고 개인 정보를 보호합니다. 또한 Android 10은 온라인 뱅킹 또는 기타 서비스와 같은 트랜잭션에 앱을 통합할 수 있는 간편한 보안 준수 구현 방법을 제공합니다.
확장 액세스
Smart Lock과 같은 3차 인증 메커니즘에서 사용하는 기본 메커니즘인 Trust Agent는 Android 10에서 잠금 해제를 확장할 수만 있습니다. Trust Agent는 더 이상 잠긴 기기를 잠금 해제할 수 없으며 최대 4시간 동안만 기기를 잠금 해제 상태로 유지할 수 있습니다.
암호화
OEMCrypto
Android 10은 OEMCrypto API 버전 15를 사용합니다.
테스트
BoundsSanitizer
Android 10은 블루투스 및 코덱에서 BoundsSanitizer(BoundSan)를 배포합니다. BoundSan은 UBSan의 bounds sanitizer를 사용합니다. 이 완화는 모듈별 수준에서 사용 설정됩니다. 이 기능은 Android의 중요한 구성요소를 안전하게 유지하는 데 도움이 되므로 사용 중지하면 안 됩니다. BoundSan은 다음 코덱에서 사용 설정되어 있습니다.
libFLAC
libavcdec
libavcenc
libhevcdec
libmpeg2
libopus
libvpx
libspeexresampler
libvorbisidec
libaac
libxaac
정수 오버플로 제거
Android 10은 소프트웨어 코덱에서 정수 오버플로 제거(IntSan)를 사용 설정합니다. 기기의 하드웨어에서 지원되지 않는 코덱에서는 재생 성능이 수용할 수 있는 수준이어야 합니다. IntSan은 다음 코덱에서 사용 설정되어 있습니다.
libFLAC
libavcdec
libavcenc
libhevcdec
libmpeg2
libopus
libvpx
libspeexresampler
libvorbisidec
실행 전용 메모리
기본적으로 AArch64 시스템 바이너리의 실행 코드 섹션은 just-in-time 코드 재사용 공격에 대비하기 위해 실행 전용(읽기 불가능)으로 표시됩니다. 데이터와 코드를 함께 사용하는 코드와 메모리 세그먼트를 먼저 읽기 가능한 것으로 다시 매핑하지 않고 이러한 섹션을 의도적으로 검사하는 코드는 더 이상 작동하지 않습니다. Android 10(API 수준 29 이상)의 타겟 SDK가 있는 앱이 먼저 섹션을 읽기 가능한 것으로 표시하지 않고 메모리에서 실행 전용 메모리(XOM) 지원 시스템 라이브러리의 코드 섹션을 읽으려고 하면 영향을 받습니다.
Scudo
Scudo는 동적 사용자 모드 메모리 할당자로, 힙 관련 취약성에 대항하여 더욱 강력한 보안을 제공하기 위해 설계되었습니다. 표준 C 할당 및 할당 해제 프리미티브와 C++ 프리미티브도 제공합니다.
ShadowCallStack
ShadowCallStack
(SCS)은 함수가 아닌 리프 함수의 함수 프롤로그에 함수의 반환 주소를 별도로 할당한 ShadowCallStack
인스턴스의 반환 주소를 로드하여 함수 에필로그의 ShadowCallStack
인스턴트에서 반환 주소 덮어쓰기(예: 스택 버퍼 오버플로우)를 방지하는 LLVM 계측 모드입니다.
오디오
오디오 HAL
Android 10에는 오디오 HAL에 대한 새로운 확장 기능이 포함되어 있습니다.
AudioSource
AudioFormat
AudioChannelMask
오디오 HAL 및 하위 시스템 구현을 위한 부가 요구 사항이 추가됩니다.
사전 처리 효과
Android는 어쿠스틱 에코 취소, 자동 게인 제어, 노이즈 제거와 같은 사전 처리 효과를 제공합니다.
Android 10에는 VOICE_COMMUNICATION
과 같이 캡처하기 위한 새로운 요구사항이 포함되어 있습니다.
오디오 정책 관리자
Android 10에는 복잡한 자동차 사례를 지원하기 위해 오디오 정책 관리자의 상당한 리팩터링이 포함되어 있습니다.
고해상도 오디오
Android 10은 고해상도 오디오를 다음과 같이 개선했습니다.
- 플로팅 지원
- 192KHz 주파수 지원
- 8채널 지원
- 타이밍 정보 포함
동시 캡처
Android 10은 동시 오디오 캡처가 두 번 이상 필요한 동시 캡처 사용자 환경을 개선합니다.
AudioPlaybackCapture
Android 10에는 AudioPlaybackCapture
라는 새로운 API가 포함되어 있어 앱이 다른 앱에서 재생 중인 오디오를 복사할 수 있습니다. 이 기능은 화면 캡처와 비슷하지만 오디오용입니다.
기본 사용 사례는 스트리밍 앱을 통해 게임에서 재생되는 오디오를 캡처하는 것입니다.
캡처 API는 오디오가 캡처되는 앱의 지연 시간에 영향을 주지 않습니다.
MIDI
Android 10에서는 MIDI를 사용하는 전문 오디오 앱을 AMidi
NDK API를 사용하여 Android 플랫폼에 포팅할 수 있습니다.
카메라
Android 10에 도입된 카메라 API, 카메라 HAL 및 카메라 모듈에 대한 변경사항은 Android 10 카메라 업데이트를 참고하세요.
카메라 프레임워크 개인 정보 보호 개선
Android 10은 카메라 프레임워크에 개인 정보 보호 개선 사항을 도입했습니다. 사용자 동의 없이 CameraCharacteristics
에 잠재적으로 민감한 정적 카메라 정보가 노출되지 않도록 하려면 앱은 getCameraCharacteristics
메서드를 사용하여 개인 정보에 민감한 태그로 정적 메타데이터를 검색할 수 있는 CAMERA
권한을 얻어야 합니다.
CAMERA
권한이 필요한 카메라 특성 키의 목록을 가져오려면 getKeysNeedingPermission
메서드를 호출합니다.
세션 재구성 쿼리
Android 10은 세션 재구성 쿼리 기능을 추가하여 내부 세션 매개변수 재구성 로직을 보다 잘 제어하여 성능을 개선합니다.
Camera HAL3 buffer management API
Android 10에는 카메라 HAL 구현에서 다양한 메모리를 달성하고 지연 시간을 상쇄하기 위해 버퍼 관리 로직을 구현할 수 있는 선택적 카메라 HAL3 버퍼 관리 API가 도입되었습니다.
카메라 HAL 동적 실제 카메라 전환
Android 10에는 논리 카메라 장치의 활성 기본 물리 카메라를 나타내는 동적 메타데이터 태그 ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
가 도입되었습니다. 자세한 내용은 다중 카메라 지원을 참조하세요.
물리적 카메라 숨기기 지원
Android 10에서 카메라 HAL은 앱에서 직접 열 수 있는 실제 카메라 수를 줄일 수 있습니다. 자세한 내용은 다중 카메라 지원을 참고하세요.
Camera2 VNDK API
Android 10에서 공급업체 모듈은 두 개의 새로운 표준 HIDL 인터페이스인 android.frameworks.cameraservice.service@2.0
과 android.frameworks.cameraservice.device@2.0
을 통해 카메라 기기에 액세스하고 제어할 수 있습니다. HIDL 인터페이스를 더 편리하게 사용하기 위해 Android 10에는 공급업체가 제공하는 라이브러리 libcamera2_vendor
도 도입되었습니다. 이 라이브러리는 Camera NDK 라이브러리와 비슷하지만 약간 수정되었습니다.
스트림 구성
Android 10에는 카메라 공급업체가 카메라 클라이언트에 대한 권장 카메라 스트림을 광고하고 스트림 조합을 쿼리하는 API를 지원할 수 있는 기능이 추가되었습니다.
카메라 스트림 조합 요구사항
Android 10을 실행하는 기기는 더 이상 실제 하위 카메라 스트림과 스트림 조합을 지원하지 않아도 됩니다. 그러나 카메라 HAL 기기 버전 3.5로 Android 10을 실행하는 기기는 앱이 물리 스트림을 포함하는 스트림 조합이 지원되는지 여부를 쿼리할 수 있도록 isStreamCombinationSupported()
를 지원해야 합니다.
자세한 내용은 다중 카메라 지원을 참고하세요.
HEIF 이미징
Android 10은 개선된 이미지 품질과 JPEG 이미지에 대한 작은 크기를 제공하는 고효율 이미지 파일(HEIF) 형식을 위한 네이티브 카메라를 지원합니다. HEIF 이미지를 지원하려면 기기에 HEIC 또는 HEVC 인코더가 있어야 합니다.
흑백 카메라
Android 10은 Y8 스트림 형식, 흑백 및 NIR 컬러 필터 배열 정적 메타데이터 및 흑백 카메라용 DngCreator
함수 관련 추가 지원을 제공합니다.
연결성
통화 및 메시지
긴급 전화번호 및 긴급 전화
Android 10은 긴급 전화와 관련해 개선된 지원을 제공합니다. 긴급 상황에서 IRadio HAL v1.4를 지원하는 기기는 SIM 카드, 네트워크 신호 또는 Android 데이터베이스와 같은 소스에서 검색된 긴급 전화번호를 사용하여 긴급 전화를 걸 수 있습니다. 경찰서, 소방서 및 구급차와 같은 응급 서비스 카테고리를 기준으로 번호를 분류할 수 있습니다.
Group call API
Group call API는 Android 9에 추가된 eMBMS API의 확장 프로그램입니다. 새로운 API는 eMBMS 미들웨어 패키지와 상호작용하여 앱이 셀 브로드캐스트 그룹 호출로 조인 및 브로드캐스팅하는 표준을 정의합니다. 그룹 통화를 하려면 칩셋 공급업체, 미들웨어 공급업체 및 이동통신사의 지원이 필요합니다. 개발자 문서는 developer.google.com에 있습니다.
원격 SIM 기능
Android 10은 Android 호스트 기기의 메시지 앱이 블루투스와 같은 메커니즘을 사용하여 스마트폰을 통해 SMS 메시지를 보낼 수 있는 원격 SIM 기능을 제공합니다. 자세한 내용은 getSubscriptionType
메서드 및 SUBSCRIPTION_TYPE_REMOTE_SIM
상수 관련 참조 문서를 확인하세요.
다중 eSIM
Android 10에서 EuiccManager
클래스는 삽입된 다중 SIM(eSIM) 또는 eUICC가 있는 기기를 지원합니다.
eSIM 업데이트
eSIM을 지원하는 Android 10을 실행하는 기기의 경우 비이동식 eUICC 슬롯 ID 배열을 정의해야 합니다. 또한 IRadio HAL v1.4 및 IRadioConfig HAL v1.2도 지원해야 합니다. 자세한 내용은 eSIM 구현 및 HAL 요구사항을 참고하세요.
5G Non-Standalone(NSA)
Android 10에는 5G Non-Standalone(NSA) 지원이 추가되었습니다. 5G NSA는 기존 4G 인프라에서 지원하는 5G 네트워크 솔루션입니다. Android 10을 실행하는 기기는 5G 네트워크에 연결되면 상태 표시줄에 5G 아이콘이 표시될 수 있습니다.
전화 계정 제안
Android 10은 전화 계정 제안 서비스를 도입하여 전화를 걸 때 사용자에게 전화 계정에 대한 추천을 표시합니다.
이동통신사
모바일 네트워크 설정 이전
Android 10은 모바일 네트워크 설정 UI 코드를 재구성하고 통신 스택에서 설정 스택으로 이전했습니다. 이전된 코드를 지원하려면 다음 모바일 네트워크 설정 구성 값을 Android 리소스에서 CarrierConfig
리소스로 변경합니다.
config_world_mode
->
CarrierConfigManager#KEY_WORLD_MODE_ENABLED_BOOL
config_support_tdscdma
->
CarrierConfigManager#KEY_SUPPORT_TDSCDMA_BOOL
config_support_tdscdma_roaming_on_networks
->
CarrierConfigManager#KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY
config_enabled_lte
->
CarrierConfigManager#KEY_LTE_ENABLED_BOOL
기기 식별자
영구 기기 식별자(IMEI/MEID, IMSI, 빌드 직렬)는 기기 및 프로필 소유자 앱에도 허용된 액세스를 보유한 특별 권한으로 보호됩니다. IMSI 및 SIM 일련번호는 이동통신사를 통해 제공되므로 이동통신사 권한이 있는 패키지에는 이러한 식별자에 대한 액세스 권한이 부여됩니다.
Wi-Fi
네트워크 선택
Android는 연결된 네트워크의 품질과 사용 가능한 네트워크의 품질을 지속적으로 평가합니다. Android 10에서 알고리즘 및 Wi-Fi 네트워크 선택 및 전환 절차를 업데이트했습니다.
Wi-Fi 기본 네트워크 오프로드 검색
Android 10은 전력 사용을 줄이기 위해 기기가 정지 상태일 때 기본 네트워크 오프로드(PNO) 스캔 사이의 간격을 늘리는 WifiManager
의 setDeviceMobilityState()
라는 선택적 API 메서드를 도입합니다.
이동통신사 Wi-Fi
Android 10에서 이동통신사 Wi-Fi 기능이 있는 기기는 구성된 이동통신사 Wi-Fi 네트워크(공개 키 인증서가 있는 네트워크)에 자동으로 연결됩니다.
Wi-Fi 간편 연결
Android 10이 설치된 기기에서는 Wi-Fi 간편 연결을 사용할 수 있어 WFA(Wi-Fi Alliance)에서 도입한 기기 프로비저닝 프로토콜(DPP)을 사용하여 Wi-Fi 기기를 프로비저닝하고 구성합니다.
지연 시간이 적은 Wi-Fi 모드
Android 10은 지연 시간을 줄이기 위해 Wi-Fi 칩을 구성하는 지연 시간이 적은 Wi-Fi 모드를 사용합니다.
업데이트된 DHCP 서버
'IP 서버' 서비스 구성의 일환으로 dnsmasq
가 삭제됩니다. Android 10은 DHCPv4 서버의 기능적 사용을 자바 프레임워크 제어판과의 통합을 위해 Java로 작성된 별도의 구성요소로 대체합니다. 이렇게 하면 DHCP 서버의 보안과 업데이트 가능성이 향상됩니다. 자세한 내용은 packages/modules/NetworkStack/src/android/net/dhcp/DhcpServer.java
를 참조하세요.
이 변경을 구현하는 데 필요한 조치는 없습니다. Android 10을 릴리스하고 업그레이드하는 모든 기기는 기본적으로 DhcpServer
를 사용합니다.
DHCP 서버를 맞춤설정한 경우 전체 설정 tether_enable_legacy_dhcp_server=1
을 설정하여 Android 9 동작으로 되돌릴 수 있습니다.
새로운 DhcpServer
는 네트워킹 구성요소 모듈에 포함되어 있으므로 DHCP 서버 기능에 대한 모든 사용자 지정이 업스트림으로 이루어져야 합니다.
WPA3 및 Wi-Fi Enhanced Open
Android 10은 WPA3(Wi-Fi Protected Access 3) 및 Wi-Fi Enhanced Open 보안 표준에 대한 지원을 추가하여 알려진 공격에 대한 개인 정보 보호 및 견고성을 강화합니다.
Wi-Fi Direct
Wi-Fi Direct 또는 Wi-Fi P2P라고도 하는 이 기술은 지원 기기에서 인터넷 또는 셀룰러 네트워크 액세스 없이 Wi-Fi Direct 프로토콜을 사용하여 직접 다른 기기를 검색하고 연결할 수 있도록 합니다.
무작위 MAC 개선
Android 10부터 MAC 무작위 순서 지정은 클라이언트 모드, SoftAp 및 Wi-Fi Direct에 대해 기본적으로 사용 설정됩니다. 기기는 시스템 UI의 각 SSID에 MAC 무작위 순서 지정을 사용 또는 사용하지 않을 옵션을 제공해야 합니다.
Passpoint R2
Android 10은 Passpoint R2 기능을 지원합니다. Passpoint R2는 새 Passpoint 프로필을 프로비저닝하기 위한 표준 방법인 온라인 가입(OSU)을 구현합니다. Android 10은 SOAP-XML을 사용하여 EAP-TTLS 프로필의 프로비저닝을 지원합니다.
NFC
보안 NFC
보안 NFC를 사용하면 기기의 화면이 잠금 해제된 경우에만 오프 호스트 NFC 카드 에뮬레이션을 사용하도록 허용합니다. 이 기능을 구현하면 보안 NFC를 사용 설정하는 옵션을 사용자에게 제공하여 보안을 강화할 수 있습니다.
Android Beam 지원 중단
Android 10에서 Android Beam은 더 이상 필요하지 않으며 다음 인터페이스와 메서드는 더 이상 사용되지 않습니다.
인터페이스
NfcAdapter.CreateBeamUrisCallback
NfcAdapter.CreateNdefMessageCallback
NfcAdapter.OnNdefPushCompleteCallback
메서드
createBeamUris
invokeBeam
isNdefPushEnabled
setBeamPushUris
setBeamPushUrisCallback
setNdefPushMessage
setNdefPushMessageCallback
setOnNdefPushCompleteCallback
createNdefMessageCallback
onNdefPushCompleteCallback
Android Beam을 사용하려면 android.sofware.nfc.beam
기능 상수를 보고합니다.
그래픽
ASurfaceControl
Android 10에는 SurfaceFlinger
가 버퍼를 허용하는 새로운 방식인 ASurfaceControl
가 추가됩니다.
그래픽 구현
OpenGL ES 계층
Android 10에는 GLES의 계층 시스템이 도입되었습니다.
EGL 1.5
Android 10은 EGL 1.5 인터페이스를 구현합니다. EGL 1.5의 새로운 기능에 대한 자세한 내용은 Khronos 릴리즈 EGL 1.5 사양을 참조하세요.
Vulkan
Android 10에는 Vulkan 1.1 그래픽이 지원됩니다.
또한 플랫폼이 VK_KHR_swapchain
v70을 지원하기 때문에 Vulcan 앱으로 swapchain 메모리에서 백업하는 VkImage
을 생성할 수 있습니다.
성과 새로고침 빈도
Android 10은 성과 새로고침 빈도에 대한 지원을 추가합니다. 이 기능은 기본적으로 사용 중지되어 있습니다.
상호작용
자동차
자동차 오디오
Android 10에서 Audio HAL 컨텍스트는 소리를 식별하기 위해 AudioAttributes.usage
에 매핑됩니다. Android는 컨텍스트당 하나의 AUDIO_DEVICE_OUT_BUS
인스턴스를 지원합니다. IAudioControl
HAL은 Audio HAL에 차량 전용 확장 프로그램을 제공합니다.
동작 탐색
Android 10은 완전한 동작 시스템 탐색을 위한 옵션을 제공합니다. 이 기능을 사용하기 위한 앱 준비 방법의 자세한 내용은 Android 개발자 사이트의 동작 탐색 페이지를 참조하세요.
신경망
Android 10은 또한 Neural Networks API 및 Neural Networks HAL에 대한 업데이트를 제공합니다. 변경사항 요약은 신경망을 참조하세요.
새롭게 업데이트된 Android 10용 Neural Networks 문서는 다음과 같습니다.
센서
센서 HAL 2.0
센서 HAL 2.0은 빠른 메시지 대기열(FMQ) HAL에서 Android 센서 프레임워크로 센서 이벤트를 전송합니다.
센서 사용 안함
Android 10에는 기기에서 모든 센서를 차단하도록 설정되어 있습니다. 이 기능은 개발자가 센서를 사용할 수 없는 상황에서 앱 기능을 테스트하고 사용자가 기기의 센서를 제어할 수 있도록 방법을 제공합니다.
기기에서 SensorService
, CameraService
및 AudioPolicyService
의 기본 구현을 사용하는 경우에는 참조 디자인에 추가 맞춤 설정이 필요하지 않습니다. 다른 센서가 있는 경우 기능 지원에 대한 자세한 내용은 맞춤설정을 참조하세요.
미디어
업데이트 가능한 미디어 구성요소
Android 10에서 Google Play 스토어 인프라 또는 파트너가 제공하는 OTA 메커니즘을 통해 미디어 관련 모듈식 시스템 구성요소를 업데이트할 수 있는 업데이트 가능한 미디어 구성요소를 제공합니다.
미디어 DRM
Android 10에서는 MediaDrm
자바 및 NDK API의 유용성 및 사용성을 개선합니다.
디코딩
Android 10은 AV1 SW 디코딩을 지원합니다.
권한
Android 10은 투명성과 사용자 개인 정보 보호를 위한 추가 권한을 구성합니다.
연락처 제공자 및 관심분야 정보
Android 10에서 연락처 제공자 구성요소에 의해 관리되는 연락처 연관성 관련 데이터는 Android 9 이하와는 다른 방식으로 액세스됩니다. 이러한 데이터 접근성 관련 변경 사항은 연락처 제공자 구성요소를 사용하는 모든 Android 10 기기의 사용자 개인 정보 보호를 개선합니다. 기본 데이터베이스에 더 이상 연락처 연관성 데이터가 포함되지 않습니다. 따라서 앱이 여기서 데이터를 쓰고 읽을 수 없습니다.
Android 10의 변경사항은 API에 큰 영향을 미칠 것으로 예상됩니다. 앱이 연락처 제공자 및 제휴사 정보에서 언급된 지원 중단된 기능을 사용하는 경우 변경사항을 보상하기 위해 앱을 업데이트할 수 있습니다. 연락처 제공자의 포크 버전을 사용하는 경우에는 연락처 제공자를 업데이트해야 합니다.
Tristate 위치 권한
Android 10의 Tristate 위치 정보 액세스 권한은 앱이 기기 위치에 액세스하는 방식에 대한 사용자의 제어성을 향상시켜 줍니다.
백그라운드 위치 액세스 알림
Android 10에는 앱이 기기 위치에 대한 어느 정도의 액세스를 지니고 있는지에 대한 투명성을 개선하고 사용자가 이러한 액세스에 대한 제어를 유지할 수 있게 도와주는 백그라운드 액세스 위치 알림이 포함되어 있습니다.
편의적 위치 제한
앱은 기기 위치를 요청한 후 요청 응답을 기다리거나 활성 위치 리스너를 사용하여 편의적 위치 업데이트를 받을 수 있습니다. Android 10부터는 편의적 위치 업데이트를 받으려면 개발자가 FusedLocationProviderClient
클래스의 수동적 위치 업데이트가 필요하다는 내용을 명시해야 합니다.
백그라운드 앱 실행 중
Android 10에서는 표시되지 않은 권한이 없는 앱은 자동으로 포그라운드로 시작할 수 없습니다. 이 변경사항은 광고 팝업 및 악의적인 도용을 억제합니다. 이 작업을 수행하는 데 필요한 작업은 없습니다.
앱 샌드박스
Android 10에서 앱은 파일 시스템의 제한된 원시 보기를 가지며 /sdcard/DCIM
과 같은 경로에 직접 액세스할 수 없습니다. 하지만 앱은 패키지 전용 경로에 원시 전체 액세스를 유지하며 Context.getExternalFilesDir()
와 같은 적용 가능한 메서드에서 반환합니다.
앱은 여전히 패키지별 경로에 대한 전체 원시 액세스 권한을 갖습니다.
파일 공유 관련 앱 샌드박스 가이드라인을 사용하여 적절한 데이터 공유 세부사항을 제공하세요.
앱 클립보드 액세스 제한
Android 10에서는 ClipboardManager.getPrimaryClip
을 호출하거나 클립보드가 변경될 때 알림을 위해 onPrimaryClipChangedListener
리스너를 추가하여 클립보드 콘텐츠를 볼 수 없도록 클립보드 액세스가 변경되었습니다. 이렇게 하면 사용자 개인 정보 보호가 강화되어 악성 앱이 클립보드를 수정할 수 없습니다.
Android 10에서 읽기 권한은 현재 입력 포커스가 있는 앱 또는 현재 키보드에만 허용됩니다. ClipboardManager.onPrimaryClipChanged()
리스너 호출은 이제 이러한 제한을 충족하는 앱에 대해서만 발생합니다.
ClipboardManager.getPrimaryClip
및 ClipboardManager.getPrimaryClipDescription
은 요청하는 앱이 기본 입력 방식 편집기(IME)가 아니거나 입력 포커스가 없는 경우 null
을 반환합니다.
활동 감지가 포함된 런타임 권한
이제 앱이 백그라운드에서 기기 위치에 액세스하면 활동 인식 대화상자가 표시됩니다. 엄격하게 제한된 런타임 권한은 Android 10에서 허용 목록에 올바르게 포함되어야 합니다.
MANAGE_DEVICE_ADMINS 권한
Android 10에서는 MANAGE_DEVICE_ADMINS
권한이 서명 또는 권한에서 서명 전용으로 변경됩니다. 즉, 플랫폼 서명 앱에서만 다른 앱을 기기 관리자로 설정할 수 있습니다.
공유 API 개선사항
Android 10은 공유와 관련된 여러 가지 새로운 Android 플랫폼 API 기능을 제공합니다. 구현에서 공유 시트 코드를 수정한 경우 구현 시 이러한 새로운 기능이 지원되는지 확인하세요. 구현 시 공유 시트 코드를 수정하지 않은 경우 새로운 기능을 지원할 필요가 없습니다.
Android 런타임(ART)
서명된 구성
서명된 Config 기능을 사용하면 SDK 인터페이스 이외의 인터페이스 제한을 APK에 삽입할 수 있습니다. 이를 통해 블랙리스트에서 특정 비 SDK 인터페이스를 제거하여 AndroidX가 안전하게 사용할 수 있습니다. 이렇게 변경되면 AndroidX는 이전 Android 버전에서 새로운 기능에 대한 지원을 추가할 수 있습니다.
성능
Cgroup 추상화 계층
Android 10에는 cgroup 추상화 계층과 작업 프로필이 포함되어 개발자가 스레드나 프로세스에 적용할 제한사항을 설명하는 데 사용할 수 있습니다.
메모리 부족 킬러 데몬(lmkd)
Android 10은 커널 압력 스톨 정보(PSI) 모니터를 사용하여 메모리 압력을 감지하는 새로운 lmkd
모드를 지원합니다.
전원
플랫폼 전원 관리
Android 10에서는 배터리 전원이 연결된 기기뿐 아니라 켜져 있는 기기에서도 휴면 모드를 사용 설정할 수 있습니다.
루틴 절전 모드
Android 10에는 루틴 기반이라 불리는 배터리 절전 모드 예약 옵션이 도입되었습니다. 루틴 절전 모드를 사용하면 OEM이 선택한 앱이 시스템에 대한 신호를 제공하여 좀 더 지능적인 절전 모드 예약을 사용할 수 있습니다. 이 옵션에는 구성이 필요하며 구현 여부는 선택사항입니다.
전원 통계 HAL
Android 10에서는 IPowerStats.hal
이 IPower.hal
의 전력 통계 취합 API를 대체합니다.
전원 HAL이 아직 전원 통계 API를 지원하지만 향후 전원 통계 HAL로만 이전될 예정입니다.
전원 통계 HAL에는 지원되는 기기의 기기 전원 측정 데이터 수집을 지원하는 새로운 API가 포함되어 있습니다. 기존의 전원 통계 모음 API도 업데이트되어 유연성이 개선되었습니다. 전원 힌팅 API는 전원 HAL 상태로 유지되며 변경되지 않습니다.
열 완화
Android 10의 열 프레임워크는 CPU, GPU, 배터리, 스킨, 냉각 기기 등 열 하위 시스템 온도 센서의 기기 인터페이스를 추상화합니다. 프레임워크는 조절을 시작하는 열 상태를 쿼리하는 폴링 인터페이스와 임계값을 초과하면 사용자에게 메시지를 전송하는 콜백 인터페이스를 도입합니다.
Android 10은 다음 세 가지 메서드를 사용하여 IThermalService
인터페이스를 통해 새 데이터 유형을 제공합니다.
getCurrentThermalStatus()
는 기기가 현재 조절 중인 경우를 제외하고 기기의 현재 열 상태를 정수로 반환합니다.addThermalStatusListener()
는 리스너를 추가합니다.removeThermalStatusListener()
는 이전에 추가된 리스너를 삭제합니다.
앱은 리스너를 추가 및 삭제하고 PowerManager
클래스의 온도 상태에 액세스합니다. Android API 또는 기기 제조업체 API와 같이 신뢰할 수 있는 시스템 서비스만 연결된 인과 관계 이벤트에 관한 정보에 액세스할 수 있습니다. 새로운 열 프레임워크의 전체 기능을 사용하려면 기기 제조업체 또는 SoC 제조업체에서 thermal HAL 2.0
을 구현해야 합니다.
열 완화 구현 예는 참조 구현에서 확인하세요.
업데이트
APEX 파일 형식
Android Pony EXpress(APEX)는 모듈식 시스템 구성요소의 설치 흐름에 사용되는 새로운 컨테이너 형식입니다.
동적 파티션
동적 파티션은 사용자 공간 파티션 시스템을 Android에 도입하여 OTA 업데이트 중에 파티션이 생성, 크기 조정 또는 폐기되도록 합니다. 기기 제조업체는 system
, vendor
및 product
와 같은 파티션의 개별 크기에 대해 걱정할 필요가 없습니다. 대신 기기에서 하나의 큰 super
파티션을 할당하며, 파티션 내에서 하위 파티션의 크기를 동적으로 변경할 수 있습니다.
동적 시스템 업데이트
동적 시스템 업데이트(DSU)를 사용하면 사용자가 현재 시스템 이미지에 대한 손상 위험 없이 인터넷에서 다운로드하여 사용해볼 수 있는 Android 시스템 이미지를 생성할 수 있습니다.
다중 사용자 백업 및 복원
Android 10은 기기의 모든 사용자에게 백업 및 복원 기능을 지원합니다. 이전에는 시스템 사용자만 백업 및 복원을 사용할 수 있었습니다. 시스템 사용자가 아닌 사용자의 백업 및 복원은 설정, 배경 화면 및 시스템 구성요소에 대해 부분적으로만 적용되므로 기본적으로 사용 중지되어 있습니다.
오버레이
userdebug
또는 eng
빌드를 사용하는 사용자는 시스템 파티션을 읽기-쓰기로 효율적으로 다시 마운트한 다음 시스템 이미지를 다시 플래시하지 않고도 여러 파일을 추가하거나 수정할 수 있습니다. 쓰기 가능한 파일 시스템의 백업 저장소를 자동으로 상위 참조로 설정하고 하위 저장소에 마운트하는 Overlayfs
를 사용할 수 있습니다. 이러한 작업은 adb disable-verity
및 adb remount
요청에서 발생합니다. 자세한 내용은 AOSP의 Overlayfs README를 참조하세요.
복구 모드에서 공유 라이브러리 지원
Android 10에서 공유 라이브러리는 복구 파티션에서 사용할 수 있으므로 모든 복구 모드 실행 파일이 정적일 필요가 없습니다. 공유 라이브러리는 파티션에서 /system/lib
또는 /system/lib64
(64비트 기기) 디렉터리에 저장됩니다.
새 공유 라이브러리를 복구 파티션에 추가하려면 recovery_available: true
또는 recovery: true
를 공유 라이브러리의 Android.bp
에 추가합니다. 전자는 라이브러리를 시스템 및 복구 파티션 모두에 설치하고 후자는 라이브러리를 복구 파티션에만 설치합니다.
공유 라이브러리 지원은 Android의 make 기반 빌드 시스템으로 빌드할 수 없습니다.
기존 정적 복구 실행 모드를 동적 모드로 변환하려면 Android.mk
의 LOCAL_FORCE_STATIC_EXECUTABLE := true
또는 Android.bp
의 static_executable: true
를 삭제합니다.
사용자 데이터 체크포인트(UDC)
Android 10에서는 Android OTA(무선 업데이트) 실패 시 Android가 이전 상태로 롤백할 수 있게 해 주는 사용자 데이터 체크포인트(UDC) 기능이 도입되었습니다.