Android 9 출시 노트

이 페이지에서는 Android 9 출시에 포함된 주요 기능을 요약하고 추가 정보 링크를 제공합니다. 이 기능 요약은 이 사이트의 기능 문서 위치에 따라 구성됩니다. 섹션 이동 및 이름 변경 관련 안내는 2018년 8월 사이트 업데이트를 참조하세요.

빌드

일반 시스템 이미지(GSI)

일반 시스템 이미지(GSI)는 Android 기기용으로 구성이 조정된 시스템 이미지입니다. 일반 시스템 이미지(GSI)에는 Android 9로 출시되는 기기와 Android 9으로 업그레이드할 기기의 GSI 간의 차이점에 대한 세부정보가 포함되어 있습니다.

아키텍처

하드웨어 추상화 계층(HAL)

HIDL 프레임워크 이전 버전과의 호환성

HIDL 프레임워크 이전 버전과의 호환성 확인은 프레임워크 이전 버전과의 호환성을 확인하는 방법입니다.

동적으로 사용 가능한 HAL

동적으로 사용 가능한 HAL은 Android 하드웨어 하위 시스템이 사용 중이지 않거나 필요하지 않을 때 동적 종료를 지원합니다.

HIDL

HIDL MemoryBlock

HIDL MemoryBlockhidl_memory, HIDL @1.0::IAllocatorHIDL @1.0::IMapper에 빌드된 추상적인 레이어입니다. 단일 메모리 힙을 공유하는 메모리 블록이 여러 개 있는 HIDL 서비스용으로 설계되었습니다.

기기 트리 오버레이

압축 오버레이

Android 9 이상에는 기기 트리 테이블 헤더의 1 버전을 사용할 때 기기 트리 blob 오버레이(DTBO) 이미지에 압축 오버레이를 사용할 수 있도록 지원하는 기능이 포함되어 있습니다.

DTO 업데이트

Android 9 이상에서는 기기 트리 오버레이(DTO)에 정의된 속성을 수정하기 전에 부트로더가 통합 기기 트리 blob을 커널에 전달해야 합니다.

DTBO 이미지 헤더 버전 관리

Android 9 이상에는 DTBO 이미지 헤더에 버전 필드가 포함됩니다.

DTBO 인증

Android 9 이상에서는 DTBO 파티션이 필요합니다. 노드를 추가하거나 SoC DT의 속성을 변경하려면 부트로더가 기기별 DT를 SoC DT에 오버레이합니다. 자세한 내용은 컴파일 및 인증을 참조하세요.

커널 규정 준수

Android 9 이상에는 커널, 인터페이스, DTBO 사용에 영향을 미치는 요구사항이 포함됩니다. 자세한 내용은 다음 페이지를 참고하세요.

공급업체 NDK

디자인 변경사항

Android 9 이상에서 변경된 VNDK 디자인에 관한 자세한 내용은 다음 페이지를 참고하세요.

ABI 검사기

ABI 안정성 페이지는 VNDK 라이브러리의 변경사항이 ABI 준수를 유지하는지 확인하는 ABI(Application Binary Interface) 검사기를 설명합니다.

VNDK 스냅샷

시스템 이미지는 VNDK 스냅샷을 사용하여 시스템 및 공급업체 이미지가 Android의 다른 버전에서 빌드된 경우에도 올바른 VNDK 라이브러리를 공급업체 이미지에 제공할 수 있습니다.

공급업체 인터페이스 객체(VINTF 객체)

공급업체 인터페이스 객체 섹션의 다음 페이지는 Android 9 이상에서의 업데이트를 설명합니다.

HIDL 지원 중단 일정

다음 페이지에서는 Android에서 HIDL HAL을 지원 중단하고 삭제하는 방식을 설명합니다.

부트로더

제품 파티션

Android 9 이상은 Android 빌드 시스템을 사용하여 /product 파티션 빌드를 지원합니다. 이전에는 Android 8.x가 Android 빌드 시스템에서 빌드된 OEM 전용 구성요소를 위한 공간을 지정하지 않고 단일 칩 시스템(SoC) 전용 구성요소를 /system 파티션에서 /vendor 파티션으로 분리하게 했습니다.

표준 부팅 사유 준수

표준 부팅 사유 페이지는 Android 9 이상에서 부트로더 부팅 이유 사양의 변경사항을 설명합니다.

system-as-root

Android 9 이상을 실행하는 모든 기기는 ramdisk.imgsystem.img(no-ramdisk라고도 함)로 병합하고 rootfs로 차례차례 마운트되는 system-as-root를 사용해야 합니다.

부팅 이미지 헤더 버전 관리

Android 9 이상에서는 부팅 이미지 헤더에 헤더 버전을 나타내는 필드가 포함됩니다. 부트로더는 이 버전 필드를 확인하고 그에 따라 헤더를 파싱해야 합니다.

복구 중인 DTBO

복구 이미지와 A/B 이외 기기의 DTBO 파티션 간 불일치로 인한 OTA 실패를 방지하려면 복구 이미지에 DTBO 이미지의 정보가 포함되어야 합니다.

디스플레이

디스플레이 컷아웃

디스플레이 컷아웃을 사용하면 앱 개발자가 더 넓고 몰입감 있는 환경을 구축하는 동시에 계속해서 기기 전면의 중요한 센서를 위한 공간을 확보할 수 있습니다.

회전 추천

화면 회전 동작 업데이트 Android 9 이상에서는 기기 방향이 바뀌어도 화면 방향을 가로 또는 세로로 고정하는 사용자 대상 제어 기능을 지원합니다.

동기화된 앱 전환

동기화된 앱 전환은 새로운 앱 전환 애니메이션을 허용합니다.

텍스트 분류(이전의 TEXTCLASSIFIER)

Android 9 이상에는 텍스트 분류를 구현하는 권장 방식인 Text Classifier 서비스와 기본 서비스 구현이 포함되어 있습니다.

넓어진 색 영역

Android 9 이상은 다음을 비롯하여 넓어진 색 영역을 지원합니다.

  • HDR(High Dynamic Range)
  • 최종 대상 데이터 공간으로서가 아닌 BT2020 색상 공간에서 콘텐츠 처리

넓어진 색 영역을 사용하려면 기기의 전체 디스플레이 스택(예: 화면, 하드웨어 컴포저, GPU)이 넓어진 색 영역 또는 버퍼 형식을 지원해야 합니다. 하드웨어가 지원하더라도 기기가 넓어진 색 영역 콘텐츠에 대한 지원을 요청하지 않아도 됩니다. 하지만 하드웨어를 최대한 활용하려면 넓어진 색 영역을 사용해야 합니다. 일관성 없는 시각적 효과를 피하려면 런타임 동안 넓어진 색 영역을 사용 중지하지 않아야 합니다.

호환성

Android 호환성 정의 문서(CDD)

Android 9 호환성 정의 문서는 새로운 기능 및 이전에 출시된 기능의 요구사항 변경 내용을 포함하여 이전 버전을 반복합니다.

설정

더 나은 앱 위젯

Android 앱 위젯 프레임워크는 특히 사용자가 위젯을 삭제하거나 수동으로 추가할 때 사용자 상호작용에 높아진 가시성을 제공합니다. 이 기능은 Launcher3에서 기본적으로 제공됩니다.

Launcher3를 기반으로 하지 않는 경우 제조업체에서 이 기능을 지원하도록 기기와 함께 제공되는 런처 앱을 업데이트해야 합니다. OEM은 기본 런처에서 새 widgetFeature 필드를 지원해야 합니다.

이 기능은 런처에서 예상대로 구현할 때만 엔드 투 엔드로 작동합니다. AOSP에는 샘플 구현이 포함되어 있습니다. 제공된 샘플 코드는 AOSP Change-Id Iccd6f965fa3d61992244a365efc242122292c0ca를 참조하세요.

패키지 설치 프로그램에 기기 상태 변경 알림

언어 또는 디스플레이 밀도와 같은 속성이 변경될 때마다 INSTALL_PACKAGES 권한을 보유한 앱으로 보호된 시스템 브로드캐스트가 전송될 수 있습니다. 수신기는 매니페스트에 등록될 수 있으며 브로드캐스트를 수신하는 프로세스가 활성화됩니다. 이와 같은 변경사항에 따라 앱의 추가 구성요소를 설치하려는 패키지 설치자에게 유용합니다. 이 브로드캐스트를 트리거할 수 있는 구성 변경이 드물기 때문입니다.

기기 상태 변경 알림 소스 코드는 platform/frameworks/base의 다음 위치에 있습니다.

  • api/system-current.txt
  • core/java/android/content/Intent.java
  • core/res/AndroidManifest.xml
  • services/core/java/com/android/server/am/ActivityManagerService.java

정보 아키텍처

설정 앱의 정보 아키텍처를 변경하면 더 많은 기능을 더 간편하게 구현할 수 있습니다.

테스트

Atest

Atest 명령줄 도구를 사용하면 Android 테스트를 로컬로 빌드, 설치 및 실행할 수 있지만 Trade Federation 테스트 하네스를 명령줄 옵션에 관한 지식이 없어도 테스트 재실행 속도를 크게 향상할 수 있습니다.

호환성 테스트 모음(CTS)

CTS 다운로드

Android 9을 지원하는 CTS 패키지는 CTS 다운로드 페이지에서 제공됩니다. 포함된 테스트의 소스 코드는 오픈소스 트리의 android-cts-9.0_r1 태그와 동기화할 수 있습니다.

CTS 옵션

Android 9의 경우 CTS v2는 다음 명령어 및 인수를 얻습니다.

  • run retry는 이전 세션에서 실패했거나 실행되지 않은 모든 테스트를 다시 시도합니다.
  • ‘--shard-count는 여러 개의 기기에서 병렬로 실행되도록 주어진 개수의 독립된 청크로 CTS를 분할합니다.

또한 이전에 문서화되지 않은 명령 --retry-type이 동일한 CTS v2 콘솔 명령 참조에 추가되었습니다.

보안 요소(SE) 서비스

보안 요소 서비스는 기기에 SE HAL 구현이 있는지, 그리고 있는 경우 그 수를 식별하여 글로벌 플랫폼이 지원하는 보안 요소를 확인합니다. API와 기본 보안 요소 구현을 테스트하기 위한 기초로 사용됩니다.

센서 퓨전 박스

이 센서 퓨전 박스는 카메라 이미지 테스트 제품군(카메라 ITS) 센서 퓨전 테스트와 멀티 카메라 동기화 테스트에서 사용되며 Android 휴대전화에 있는 카메라 및 다른 센서의 타임스탬프 정확도를 측정하는 데 일관적인 테스트 환경을 제공합니다. 자세한 내용은 다음 페이지를 참고하세요.

ITS-in-a-box의 넓은 시야

ITS-in-a-box의 넓은 시야는 카메라 ITS에서 넓은 시야(WFoV) 및 일반 시야(RFoV)의 카메라 시스템을 테스트하도록 설계된 자동화 시스템입니다.

공급업체 테스트 모음(VTS)

호스트 컨트롤러 아키텍처

VTS 호스트 컨트롤러 아키텍처는 클라우드 기반 테스트를 제공하는 서비스와 통합된 VTS 테스트 프레임워크의 아키텍처입니다.

서비스 이름 인식 HAL 테스트

VTS 서비스 이름 인식 HAL 테스트는 VTS 테스트가 실행되는 기기에 따라 지정된 HAL 인스턴스의 서비스 이름을 가져오는 것을 지원합니다.

HAL 테스트 가능성 확인

VTS HAL 테스트 가능성 확인에는 기기 구성을 사용하여 해당 기기 타겟에서 건너뛸 VTS 테스트를 식별하는 런타임 메서드가 포함됩니다.

자동화된 테스트 인프라

자동화된 테스트 인프라는 VTS, CTS의 자동 테스트 또는 AOSP 일반 시스템 이미지(GSI)를 실행하는 파트너 기기의 다른 테스트를 자동화하기 위한 VTS 인프라입니다.

디버깅

고급 원격 분석

Android에서 원격 분석은 기기, Android 시스템, 앱에 대한 사용 및 진단 정보를 자동으로 수집하는 프로세스입니다. 이전 버전의 Android에서는 원격 분석 스택이 제한되어 시스템 안정성과 기기 또는 앱 문제를 확인하고 해결하는 데 필요한 정보를 수집하지 못했습니다. 이로 인해 문제의 근본 원인을 파악하는 것이 어려웠습니다.

Android 9에는 statsd 원격 분석 기능이 포함되어 데이터를 더 빠르게 수집하여 이러한 결함을 해결합니다. statsd는 앱 사용량, 배터리 및 프로세스 통계 및 충돌을 수집합니다. 데이터는 제품, 하드웨어 및 서비스를 개선하기 위해 분석되고 사용됩니다.

자세한 내용은 frameworks/base/cmds/statsd/를 참조하세요.

보안 기능

애플리케이션 서명

v3 APK 서명 체계는 APK 키 순환을 지원합니다.

생체 인식 지원

Android 9에는 공개 클래스 BiometricPrompt가 포함되어 있어 앱에서 기기와 모달리티에 상관없이 생체 인식 인증을 통합하는 데 사용할 수 있습니다. BiometricPrompt를 포함하도록 생체 인식 스택을 통합하는 것에 대한 자세한 내용은 생체 인식을 참조하세요.

동적 분석

Android 9에서는 더 많은 악용 완화 및 분석 도구에 대한 지원을 포함합니다.

제어 흐름 무결성(CFI)

제어 흐름 무결성(CFI)은 컴파일된 바이너리의 원래 제어 흐름 그래프에 대한 변경을 금지하는 보안 메커니즘으로 이러한 공격을 실행하기가 훨씬 어렵습니다.

커널 CFI

기본적으로 사용되는 시스템 CFI 외에도 Android 9 이상은 커널 제어 흐름 무결성(CFI)을 지원합니다.

암호화

파일 기반 암호화(FBE)

파일 기반 암호화(FBE)채택 가능한 저장소에서 작동하도록 업데이트되었습니다. 새 기기는 전체 디스크 암호화 대신 파일 기반 암호화를 사용해야 합니다.

메타데이터 암호화

Android 9 이상은 하드웨어 지원이 있는 메타데이터 암호화를 지원합니다. 메타데이터 암호화를 사용하면 부팅 시 단일 키가 파일 기반 암호화를 사용하여 암호화되지 않은 모든 콘텐츠를 암호화합니다.

키 저장소

Android 9 이상에는 이러한 기능이 포함된 Keymaster 4가 포함됩니다.

StrongBox

Android 9 이상에는 내장 보안 요소(SE)와 같이 보안 수준이 높은 애플리케이션을 위해 물리적으로 분리형 CPU에 저장되고 사용되는 Android 키 저장소 키에 대한 지원이 포함됩니다. StrongBox Keymaster는 개별 보안 하드웨어에서 Keymaster HAL을 구현한 것입니다. StrongBox의 특징은 다음과 같습니다.

  • 개별 CPU
  • 통합 보안 저장소
  • 고품질 순수 난수 생성기
  • 변조 방지 패키징
  • 부채널 방지 기능

보안 키 가져오기

Keymaster 4로 키를 안전하게 가져오기 위해 기기 외부에서 생성된 키는 키를 사용하는 방법을 정의하는 인증 사양으로 암호화됩니다.

3DES 지원

Keymaster 4는 3DES를 사용하는 기존 시스템과의 호환성을 위해 3DES를 포함합니다.

버전 결합

Treble의 모듈형 구조를 지원하고 system.imgboot.img의 결합을 끊기 위해 Keymaster 4는 키 버전 결합 모델이 각 파티션에 대해 별도의 패치 수준을 갖도록 변경했습니다. 이렇게 하면 롤백을 방지하면서 각 파티션을 독립적으로 업데이트할 수 있습니다.

Android 보안 확인 API

Android 9가 설치된 상태에서 지원되는 기기는 개발자에게 Android 보안 확인 API를 사용할 수 있는 기능을 제공합니다. 이 API를 사용하면 앱에서 ConfirmationPrompt 인스턴스를 사용하여 사용자에게 짧은 명령문을 승인해 달라고 요구하는 메시지가 표시될 수 있습니다. 이 명령문을 사용하면 앱에서 사용자가 결제와 같은 민감한 거래를 완료하기를 바란다는 것을 재차 확인할 수 있습니다.

SELinux

앱별 SELinux 샌드박스

애플리케이션 샌드박스에는 Android 9 이상을 타겟팅하면서 권한이 없는 모든 앱이 개별 SELinux 샌드박스를 실행하도록 하는 새로운 보호 조치 및 테스트 사례가 있습니다.

Treble SELinux 변경사항

Android 9 이상에서 Treble SELinux 업데이트는 SELinux 섹션의 여러 페이지에 설명되어 있습니다.

공급업체 초기화

공급업체 초기화는 별도의 SELinux 도메인을 사용하여 분리된 Treble 시스템/공급업체 분할의 허점을 채워 공급업체별 권한으로 /vendor 명령어를 실행하도록 합니다.

시스템 속성

Android 9는 systemvendor 파티션 간에 시스템 속성이 불필요하게 공유되는 것을 제한하고 공유 시스템 속성 간의 일관성을 보장하는 방법을 제공합니다.

SELinux 속성 테스트

Android 9에는 특정 위치의 모든 파일에 적절한 속성이 있는지 확인하는 새로운 빌드 시간 테스트가 포함되어 있습니다. 예를 들어 sysfs에 있는 모든 파일에는 필수 sysfs_type 속성이 있습니다.

오디오

고해상도 오디오 효과

고해상도 오디오 효과 업데이트에는 효과 처리를 int16에서 플로팅 형식으로 변환, 동시 클라이언트 출력 트랙, 최대 클라이언트/서버 메모리 및 총 혼합 트랙 증가가 포함됩니다.

카메라

외장 USB 카메라

Android 9 이상은 표준 Android Camera2 API 및 카메라 HIDL 인터페이스를 사용하는 플러그 앤 플레이 USB 카메라(즉, 웹캠) 사용을 지원합니다.

모션 추적

카메라 기기는 모션 추적 기능을 광고할 수 있습니다.

다중 카메라 지원

다중 카메라 지원에는 동일한 방향을 가리키는 둘 이상의 물리적 카메라 기기로 구성된 새로운 논리 카메라 기기를 통한 다중 카메라 기기에 대한 API 지원이 포함됩니다.

세션 매개변수

세션 매개변수를 구현하면 카메라 클라이언트가 캡처 세션 초기화 단계의 일부로 비용이 많이 드는 요청 매개변수의 하위 집합을 능동적으로 구성하게 만들 수 있어 지연을 줄일 수 있습니다.

단일 제작자, 다중 소비자 버퍼

단일 제작자, 다중 소비자 카메라 버퍼 전송은 캡처 세션이 활성화되고 카메라 스트리밍이 진행되는 동안 카메라 클라이언트가 출력 표면을 동적으로 추가하고 제거할 수 있도록 하는 메서드의 집합입니다.

연결성

통화 및 메시지

데이터 요금제 구현

Android 9 이상은 SubcriptionPlan API를 사용하여 데이터 요금제 구현에 대한 향상된 지원을 제공합니다.

타사 통화 앱

Android 9 이상 버전에서는 타사(3P) 통화 앱에서 동시에 수신되는 이동통신사 이용 통화를 처리하고 시스템 통화 기록에 통화가 기록되도록 허용하는 API를 제공합니다.

이동통신사

이동통신사 ID

Android 9에서는 AOSP가 이동통신사 ID에 도움이 될 이동통신사 ID 데이터베이스를 추가합니다. 데이터베이스는 이동통신사를 식별하는 공통의 방법을 제공하여 중복 로직과 분할된 앱 환경을 최소화합니다.

eSIM

임베디드 SIM(eSIM 또는 eUICC)은 휴대기기 사용자가 물리적인 SIM 카드 없이도 이동통신사 프로필을 다운로드하고 이동통신사의 서비스를 활성화할 수 있는 최신 기술입니다. Android 프레임워크는 Android 9 이상에서 eSIM 액세스 및 eSIM의 구독 프로필 관리를 위한 표준 API를 제공합니다. 자세한 내용은 다음을 참고하세요.

IMS 설정에 대한 다중 SIM 지원

Android 9 이상은 IP 멀티미디어 하위 시스템(IMS)에 대한 사용자 설정을 개선합니다. 모든 구독에서 이 설정을 공유하는 대신 구독별로 보이스오버 LTE(VoLTE), 화상 통화, Wi-Fi 통화를 설정할 수 있습니다.

SIM 상태 브로드캐스트

Android 9 이상에서 Intent.ACTION_SIM_STATE_CHANGED는 지원 중단되었고 카드 상태 및 카드 애플리케이션 상태에 대한 2개의 개별 브로드캐스트 TelephonyManager.ACTION_SIM_CARD_STATE_CHANGEDTelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED가 추가되었습니다.

이러한 변경을 통해 카드가 있는지만 확인해야 하는 수신자는 애플리케이션 상태 변경을 수신할 필요가 없으며 카드 애플리케이션의 준비 여부를 알아야 하는 수신기는 카드 상태의 변경사항을 수신할 필요가 없습니다.

두 개의 새 브로드캐스트는 @SystemApis이며 고정적이지 않습니다. READ_PRIVILEGED_PHONE_STATE 권한이 있는 수신기만 브로드캐스트를 수신할 수 있습니다.

인텐트는 기기를 잠금 해제할 때 다시 브로드캐스트되지 않습니다. 잠금을 해제하기 전에 전송된 브로드캐스트에 의존하는 수신자는 directBootAware를 사용하거나 사용자 잠금 해제 후 상태를 조회해야 합니다. TelephonyManager에서 해당 API(getSimCardState()getSimApplicationState())를 사용하여 상태를 조회할 수 있습니다.

Wi-Fi

이동통신사 Wi-Fi

이동통신사 Wi-Fi 기능을 사용하면 기기에서 이동통신사에서 구현하는 Wi-Fi 네트워크에 자동으로 연결할 수 있습니다. 정체가 심하거나 경기장이나 지하철역과 같이 통화 가능지역이 최소인 지역에서 이동통신사 Wi-Fi는 연결성을 개선하고 트래픽을 오프로드합니다.

MAC 주소 무작위 지정

MAC 무작위 순서 지정을 통해 기기는 현재 네트워크와 연결되어 있지 않은 상태에서 새 네트워크를 탐색할 때 임의의 MAC 주소를 사용할 수 있습니다. Android 9 이상에서는 Wi-Fi 네트워크에 연결할 때 기기에서 무작위로 선정한 MAC 주소를 사용하도록 개발자 옵션을 설정할 수 있습니다.

자동으로 Wi-Fi 사용 설정

자동으로 Wi‑Fi 사용 설정을 활성화되면 기기가 상대 수신 신호 강도 표시기(RSSI)와 함께 저장된 Wi-Fi 네트워크 근처에 있을 때마다 Wi-Fi가 자동으로 다시 설정됩니다.

Wi-Fi 왕복 시간(RTT)

Wi-Fi 왕복 시간(RTT)을 통해 기기는 액세스 포인트(AP) 또는 Wi-Fi Aware 피어(Wi-Fi Aware가 기기에서 지원되는 경우)든지 다른 지원 기기까지의 거리를 측정할 수 있습니다. 이 기능은 IEEE 802.11mc 프로토콜을 기반으로 하며 앱에서 향상된 위치 정확성과 인지도를 사용할 수 있게 해줍니다.

Wi-Fi 스코어링 개선

Wi-Fi 스코어링 모델을 개선하여 기기가 연결된 Wi-Fi 네트워크를 종료하거나 새 Wi-Fi 네트워크에 진입할 때를 빠르고 정확하게 결정합니다. 이러한 모델은 연결의 격차를 피함으로써 사용자에게 안정적이고 매끄러운 환경을 제공합니다.

config.xml 리소스, 특히 다음에서 RSSI 값을 검토하고 조정하세요.

  • config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz
  • config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz
  • config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz
  • config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz

Wi-Fi STA/AP 동시 실행

Wi-Fi STA/AP 동시 실행은 기기가 STA 및 AP 모드에서 동시에 작동하는 능력입니다. 듀얼 밴드 동시(DBS) Wi-Fi를 지원하는 기기의 경우 이는 사용자가 핫스팟(SoftAP)을 설정하려고 할 때 STA Wi-Fi를 방해하지 않는 등의 기능을 사용할 수 있도록 합니다.

WiFiStateMachine 개선

WifiStateMachine은 Wi-Fi 활동 제어, 사용자 입력 조정, 핫스팟, 스캔, 연결 또는 꺼짐, Wi-Fi 네트워크 작업(스캔, 연결 등)을 제어하는 데 사용되는 기본 클래스입니다.

Android 9 이상에서 Wi-Fi 프레임 워크 코드 및 WifiStateMachine 구현이 재구성되어 코드 크기가 줄어들고, 따르기 쉬운 Wi-Fi 제어 로직, 제어 세분성 향상 및 단위 테스트의 범위 및 품질이 향상되었습니다.

상위 수준에서 WifiStateMachine는 Wi-Fi가 4가지 상태 중 하나가 되도록 허용합니다.

  • 클라이언트 모드(연결 및 스캔 가능)
  • 스캔 전용 모드
  • SoftAP 모드(Wi-Fi 핫스팟)
  • 사용 중지됨(Wi-Fi 완전 사용 중지됨)

각 Wi-Fi 모드는 서비스 실행에 대한 요구사항이 다르므로 작동과 관련된 이벤트만 처리하여 일관된 방식으로 설정해야 합니다. 새로운 구현은 코드를 해당 모드와 관련된 이벤트로 제한하여 디버깅 시간을 줄이고 복잡성으로 인해 새로운 버그가 발생할 위험을 줄입니다. 모드 기능에 대한 명시적인 처리 외에도 스레드 관리는 일관된 방식으로 처리되며 비동기 채널의 사용은 동기화 메커니즘으로 제거됩니다.

Wi-Fi 권한 업데이트

Android 9 이상 버전에서는 CHANGE_WIFI_STATE 앱 권한이 기본적으로 사용 설정되어 있습니다. 설정 > 앱 및 알림 > 특수 앱 액세스 > Wi-Fi 제어의 설정 페이지에서 앱에 대한 권한을 사용 중지할 수 있습니다.

앱에서는 CHANGE_WIFI_STATE 권한이 부여되지 않는 경우 케이스를 처리할 수 있어야 합니다.

이 동작을 확인하려면 roboelectric 및 수동 테스트를 실행합니다.

수동 테스트:

  1. 설정 > 앱 및 알림 > 특수 앱 액세스 > Wi-Fi 제어로 이동합니다.
  2. 앱에 대한 권한을 선택하고 사용 중지합니다.
  3. CHANGE_WIFI_STATE 권한이 부여되지 않은 경우에 앱에서 다음과 같은 시나리오를 처리할 수 있는지 확인합니다.

WPS 지원 중단

보안 문제로 인해 WiFiManager의 Wi-Fi Protected 설정(WPS)이 지원 중단되며 Android 9 이상에서 사용 중지됩니다. 하지만 WiFiDirect는 WPS를 WPA 서플리컨트에서 계속 사용합니다.

그래픽

구현

Vulkan 1.1 API

Android 9 이상은 Vulkan 1.1 그래픽 API 구현을 지원합니다.

창 전환 추적을 위한 WinScope 도구

Android 9 이상에는 창 전환 추적을 위한 WinScope 도구가 포함되어 있습니다. WinScope는 전환 중 및 전환 후에 창 관리자 상태를 기록하고 분석하는 인프라와 도구를 제공합니다. 모든 창 관리자 상태를 추적 파일에 기록하는 동안 윈도우 전환을 기록하고 스테핑할 수 있습니다. 이 데이터를 사용하여 다시 재생하고 단계적으로 전환할 수 있습니다.

WinScope 도구의 소스 코드는 platform/development/tools/winscope에 있습니다.

상호작용

자동차 오디오

자동차 오디오에서는 자동차 관련 Android 구현을 위한 오디오 아키텍처에 관해 자세히 설명합니다.

신경망(NN) HAL은 다양한 가속기의 추상화를 정의합니다. 이러한 가속기의 드라이버는 이 HAL을 준수해야 합니다.

차량 HAL

차량 속성은 차량 HAL 인터페이스의 변경사항을 설명합니다.

GNSS 위성 선택

새로운 글로벌 탐색 위성 시스템(GNSS) HAL (v1.1 이상)을 사용하는 경우 Android 프레임워크가 Android 설정을 모니터링합니다. 파트너는 Google Play 서비스 또는 기타 시스템 업데이트에서 설정을 변경할 수 있습니다. 이러한 설정은 GNSS HAL에 특정 GNSS 위성이 사용되지 않아야 함을 알려줍니다. 이는 GNSS 위성 또는 별자리 오류가 지속될 경우 또는 다른 시간 시스템과 윤초, 일 또는 주 번호 롤오버와 같은 외부 이벤트를 별자리와 함께 사용할 때 발생할 수 있는 GNSS HAL 구현 문제를 더 빠르게 해결하려는 경우 유용할 수 있습니다.

GNSS 하드웨어 모델

Android 9에서 GNSS HAL 버전 1.1 이상은 하드웨어 API에 관한 정보를 플랫폼으로 전달할 수 있습니다. 플랫폼은 IGnssCallback 인터페이스를 구현하고 핸들을 HAL에 전달해야 합니다. GNSS HAL은 하드웨어 모델 정보를 LocationManager#getGnssHardwareModelName() 메서드를 통해 전달합니다. 기기 제조업체는 가능한 경우 GNSS HAL 제공업체와 협력하여 이 정보를 제공해야 합니다.

권한

DAC(Discretionary Access Control) 구성 업데이트

DAC(Discretionary Access Control) 구성에는 파일 시스템 기능을 확장하기 위한 AID(Android ID) 메커니즘 업데이트가 포함되어 있습니다.

권한 있는 앱 권한 허용

Android 9 이상에서 거부해야 할 권한이 있는 경우 XML을 수정하여 deny-permission 태그 대신 이전 출시에서 사용된 permission 태그를 사용합니다.

데이터

대역폭 추정 개선

Android 9는 대역폭 추정에 대한 향상된 지원을 제공합니다. Android 앱은 사용 가능한 데이터 대역폭에 액세스할 수 있는 경우 화상 통화 및 동영상 스트리밍에 더 적합한 해상도를 설정할 수 있습니다.

Android 6.0 이상을 실행하는 기기에서 셀룰러 네트워크에 대한 대역폭 추정을 원하는 발신자는 ConnectivityManager.requestBandwidthUpdate()를 호출하고 프레임워크에서 추정된 다운링크 대역폭을 제공할 수도 있습니다.

하지만 9 이상을 실행하는 기기에서는 추정 대역폭에 큰 변화가 있을 때 onCapabilitiesChanged() 콜백이 자동으로 실행되며 requestBandwidthUpdate() 호출에는 아무런 문제가 없습니다. 연결된 getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps()는 물리 레이어에서 제공하는 업데이트된 정보로 채워집니다.

또한 기기는 ServiceState.getCellBandwidths()를 통해 LTE 셀 대역폭을 확인할 수 있습니다. 이를 통해 애플리케이션은 특정 셀에서 사용할 수 있는 대역폭(주파수)의 양을 결정할 수 있습니다. 셀 대역폭 정보는 필드 테스터가 최신 정보를 확인할 수 있도록 숨겨진 메뉴를 통해 제공됩니다.

eBPF 트래픽 모니터링

eBPF 네트워크 트래픽 도구는 커널과 사용자 공간 구현의 조합을 이용하여 기기의 마지막 부팅 이후의 네트워크 사용량을 모니터링합니다. 이 도구는 휴대전화 상태에 따라 네트워크 액세스에서 앱을 차단하기 위해 소켓 태그 지정, 포그라운드/백그라운드 트래픽 분리, UID별 방화벽과 같은 추가 기능을 제공합니다.

더 낮은 API로 복원

이제 기기에서 향후 운영체제 버전에서 복원할 수 있습니다. 특히 사용자가 휴대전화를 업그레이드했는데 휴대전화를 분실하거나 망가뜨린 경우에 유용합니다.

OEM에서 시스템 패키지(android, system, settings)에 대한 백업 에이전트를 수정하는 경우 해당 에이전트는 충돌 없이 최소한 일부의 데이터를 복원하여 상위 버전의 플랫폼에서 만들어진 백업 세트 복원을 처리해야 합니다.

core/java/android/provider/SettingsValidators.java에서와 같이 유효성 검증기를 사용하여 제공된 백업 데이터의 유효하지 않은 값을 확인하고 유효한 데이터만 복원하십시오.

이 기능은 기본적으로 사용 설정되어 있습니다. 향후 버전에서 복원하기 위한 SettingsBackupAgent 지원은 Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION을 통해 사용 중지할 수 있습니다. 기기 제조업체가 ROM에 포함된 백업 에이전트 중 하나를 확장하거나 사용자 정의 에이전트를 추가하지 않으면 추가 구현이 필요하지 않습니다.

이 기능을 사용하면 플랫폼의 향후 버전에서 시스템을 복원할 수 있지만 복원된 데이터가 완전하지 않을 것이라고 예상할 수 있습니다. 다음 지침은 다음 백업 에이전트에 적용됩니다.

  • PackageManagerBackupAgent 는 형식 버전 관리를 통해 향후 버전의 백업 데이터를 지원합니다. 여기서 확장 기능은 현재 복원 코드와 호환되거나 클래스의 지시사항을 따라야 합니다. 여기에는 올바른 상수 충돌이 포함됩니다.

  • SystemBackupAgent가 Android 9 이상에서 restoreAnyVersion = false를 지정합니다. 상위 버전의 API에서 복원을 지원하지 않습니다.

  • SystemBackupAgent가 Android 9 이상에서 restoreAnyVersion = true를 지정합니다. 검사기를 통해 부분적으로 지원됩니다. 대상 OS에 검사기가 있는 경우 상위 API 버전에서 설정을 복원할 수 있습니다. 설정을 추가하려면 검사기도 있어야 합니다. 클래스에서 자세한 내용을 확인하세요.

  • ROM에 포함된 모든 맞춤설정 백업 에이전트는 백업 데이터 형식에 호환되지 않는 변경사항이 있을 때마다 버전 코드를 늘리고 에이전트가 향후 버전의 코드에서 백업 데이터를 처리할 준비가 되지 않은 경우 restoreAnyVersion = false(기본값)를 보장해야 합니다.

기업

관리 프로필 개선

관리 프로필의 UX 변경사항으로 인해 사용자가 관리 프로필을 더 쉽게 식별하고 액세스하고 제어할 수 있습니다.

OTA 일시중지

새로운 @SystemApi를 사용하면 기기 소유자가 보안 업데이트를 포함한 OTA 업데이트를 무제한으로 일시중지할 수 있습니다.

성능

Health 2.0

Android 9 이상에는 android.hardware.health HAL 2.0, health@1.0 HAL의 주 버전 업그레이드가 포함됩니다. 자세한 내용은 다음 페이지를 참고하세요.

APK 캐싱

Android 9 이상에는 A/B 파티션을 지원하는 기기에 미리 로드된 앱을 빠르게 설치할 수 있도록 하는 APK 캐싱 솔루션이 포함됩니다. OEM은 사용자용 데이터 공간에 영향을 주지 않고 새로운 A/B 파티션 기기의 비어 있는 B 파티션에 주로 저장된 APK 캐시에 미리 로드 및 인기 있는 앱을 배치할 수 있습니다.

프로필 기반 최적화(PGO)

Android 9 이상에서는 청사진 빌드 규칙이 있는 기본 Android 모듈에 Clang의 프로필 기반 최적화(PGO) 사용을 지원합니다.

WAL(Write-Ahead Logging)

호환성 WAL(Write-Ahead Logging)이라고 하는 특수 SQLiteDatabase 모드는 데이터베이스가 데이터베이스당 최대 하나의 연결을 유지하면서 journal_mode=WAL을 사용할 수 있도록 합니다.

부팅 시간

Android 9는 부팅 시간 최적화에 설명된 대로 부팅 시간 최적화를 변경합니다.

전원

백그라운드 제한

Android 9 이상에는 사용자가 배터리 전원을 소모할 수 있는 앱을 제한할 수 있도록 백그라운드 제한이 포함되어 있습니다. 시스템이 기기의 상태에 부정적인 영향을 미치는 앱을 사용 중지하도록 제안할 수도 있습니다.

무배터리 기기

Android 9은 무배터리 기기를 이전 버전보다 더욱 정교하게 처리합니다. Android 9에서는 기본적으로 배터리가 있다고 가정했거나 100%에서 충전되고 있었거나 서미스터 온도가 정상으로 판독되는 정상 상태였던 무배터리와 관련된 코드 중 일부가 제거되었습니다.