내년 초 출시될 대형 화면용 기능 출시인 12L을 준비하세요. 지금 사용해 보기

기능 및 API 개요

Android 12에서는 개발자를 위한 훌륭한 새 기능과 API가 도입됩니다. 아래 섹션을 통해 앱의 기능을 알아보고 관련 API를 시작할 수 있습니다.

새로운 API, 수정된 API, 삭제된 API에 관한 자세한 목록은 API 차이점 보고서를 참고하세요. 새로운 API에 관한 자세한 내용은 Android API 참조를 방문하세요. 새로운 API가 강조표시되어 쉽게 확인 가능합니다. 또한 플랫폼 변경이 앱에 영향을 줄 수 있는 분야에 관해 알아보려면 Android 12를 타겟팅하는 앱모든 앱의 Android 12 동작 변경사항을 확인해야 합니다.

사용자 환경

Material You

Android 12에서는 더욱 맞춤설정되고 멋진 앱을 빌드할 수 있는 Material You라는 새로운 디자인 언어를 도입합니다. 최신 머티리얼 디자인 3 업데이트를 모두 앱에 가져오려면 알파 버전의 머티리얼 디자인 구성요소를 사용해 보세요.

Material You

위젯 개선사항

Android 12에서는 기존 Widgets API를 개선하여 플랫폼과 런처에서 사용자 환경과 개발자 환경을 개선합니다. Google에서 만든 가이드를 통해 위젯을 Android 12와 호환되도록 설정하고 새로운 기능으로 새로고침할 수 있습니다.

자세한 내용은 Android 12 위젯 개선사항을 참고하세요.

리치 콘텐츠 삽입

Android 12에서는 클립보드나 키보드, 드래그 앤 드롭 등 사용 가능한 모든 소스의 리치 콘텐츠를 앱이 수신할 수 있는 새로운 통합 API를 도입합니다.

자세한 내용은 리치 콘텐츠 수신을 참고하세요.

앱 스플래시 화면 API

Android 12에서는 모든 앱을 위한 새 앱 실행 애니메이션을 도입하며 여기에는 실행 시점의 앱 내 모션, 앱 아이콘을 보여주는 스플래시 화면, 앱 자체로의 전환이 포함됩니다. 자세한 내용은 스플래시 화면 개발자 가이드를 참고하세요.

둥근 모서리 API

Android 12에서는 둥근 모서리의 반경과 중심점을 제공하는 RoundedCornerWindowInsets.getRoundedCorner(int position)를 도입합니다.

자세한 내용은 둥근 모서리를 참고하세요.

리치 햅틱 환경

Android 12에서는 유익한 UI 이벤트 햅틱 반응과 몰입도 높고 재미있는 게임 효과, 생산성을 위한 주의를 끄는 햅틱을 만드는 도구를 확장합니다.

액추에이터 효과

Android 12는 최신 액추에이터의 더 넓은 주파수 대역폭을 활용하는 낮은 틱과 같은 표현 효과를 추가합니다. 이제 게임 개발자는 게임 컨트롤러에서 독립적으로 여러 다양한 액추에이터에 액세스하여 여러 액추에이터에서 같은 효과를 동기식으로 제공하거나 다양한 햅틱 효과를 제공할 수 있습니다. 개발자의 경우 상수프리미티브를 리치 햅틱 효과의 구성요소로 사용하는 것이 좋습니다. 상수는 UI 이벤트를 개선하고 햅틱 컴포저는 더 복잡한 효과를 위해 프리미티브를 배열합니다. 이러한 API는 Pixel 4 기기에서 사용해 볼 수 있으며 Google은 기기 제조업체 파트너와 지속적으로 협력하여 생태계 전반에 걸친 사용자에게 최신 햅틱 지원을 제공합니다.

오디오 결합 햅틱 효과

Android 12 앱은 휴대전화의 진동기를 사용하여 오디오 세션에서 파생된 햅틱 반응을 생성할 수 있습니다. 이를 통해 몰입형 게임 및 오디오 환경을 더 많이 제공할 수 있습니다. 예를 들어 햅틱 강화 벨소리로 발신자를 식별할 수 있고 운전 게임은 거친 지형의 느낌을 시뮬레이션할 수도 있습니다.

자세한 내용은 HapticGenerator 참조 문서를 참고하세요.

AppSearch

Android 12에서는 고성능 온디바이스 검색엔진 AppSearch를 시스템 서비스로 도입합니다. AppSearch를 사용하면 애플리케이션이 구조화된 데이터의 색인을 생성하고 내장된 전체 텍스트 검색 기능으로 이를 검색할 수 있습니다. 또한 AppSearch는 효율성이 높은 색인 생성 및 검색과 다국어 지원, 관련성 순위와 같은 기본 검색 기능을 지원합니다.

AppSearch 내 색인 생성과 검색을 보여주는 다이어그램

AppSearch는 두 가지 버전으로 제공됩니다. 하나는 이전 버전의 Android와 호환되는 애플리케이션에서 사용할 로컬 색인이고 다른 하나는 Android 12의 전체 시스템에서 유지되는 중앙 색인입니다. 중앙 색인을 사용하면 애플리케이션이 시스템의 사전 설치된 인텔리전스 구성요소로 시스템 UI 노출 영역에 데이터가 표시되도록 허용할 수 있습니다. 정확히 어떤 데이터가 시스템 UI 노출 영역에 표시되는지는 OEM에 따라 다릅니다. 또한 애플리케이션이 데이터를 다른 애플리케이션과 안전하게 공유하여 다른 애플리케이션에서도 데이터를 검색할 수 있습니다.

개발자 가이드에서 AppSearch를 자세히 알아보고 개발자 친화적인 API 노출 영역과 주석 프로세서 지원을 제공하는 AppSearch Jetpack 라이브러리와 함께 AppSearch를 사용해 보세요.

게임 모드

Game Mode API게임 모드 개입을 사용하면 사용자 설정 또는 게임별 구성을 기반으로 성능이나 배터리 수명과 같은 특성의 우선순위를 지정하여 게임플레이를 최적화할 수 있습니다.

자세한 내용은 게임 모드를 참고하세요.

PIP 모드 개선사항

Android 12에서 도입된 PIP 모드의 새로운 기능은 다음과 같습니다.

  • 동작 탐색에서 PIP 모드로 더 원활하게 전환하는 새 API 플래그

    동작 탐색 모드에서 위로 스와이프하여 홈으로 이동할 때 setAutoEnterEnabled 플래그를 사용하여 PIP 모드로 더 매끄럽게 전환할 수 있습니다. 이전에는 Android에서 위로 스와이프하여 홈으로 이동 애니메이션이 완료될 때까지 기다린 후 PIP 창을 페이드 인했습니다.

  • 동영상이 아닌 콘텐츠의 원활한 크기 조절을 사용 중지하는 새 API 플래그

    SeamlessResizeEnabled 플래그는 PIP 창에서 동영상이 아닌 콘텐츠의 크기를 조절할 때 훨씬 더 매끄러운 크로스페이드 애니메이션을 제공합니다. 이전에는 PIP 창에서 동영상이 아닌 콘텐츠의 크기를 조절하면 시각적 아티팩트가 부자연스럽게 보일 수 있었습니다.

  • PIP 모드를 종료할 때 더 매끄러운 애니메이션

    이제 PIP 모드를 종료할 때 더 매끄러운 애니메이션을 구현하기 위해 SourceRectHint 플래그가 재사용됩니다. 종료 시 시스템은 PIP 전환에 사용된 원래 Rect이든 앱에서 제공한 업데이트된 Rect이든 상관없이 현재 사용 가능한 sourceRectHint를 사용하여 애니메이션을 만듭니다.

  • 새 동작 지원

    Android 12에서는 이제 PIP 창을 숨기는 동작과 손가락을 모으거나 펼쳐 확대/축소하는 동작이 지원됩니다.

    • 창을 숨기려면 사용자가 창을 왼쪽이나 오른쪽 가장자리로 드래그하면 됩니다. 창을 다시 꺼내려면 사용자는 숨긴 창에서 보이는 부분을 탭하거나 드래그하면 됩니다.

    • 이제 사용자는 손가락을 모으거나 펼쳐 확대/축소 동작을 사용하여 PIP 창의 크기를 조절할 수 있습니다.

Android 12 이상을 타겟팅하는 앱에 영향을 미치는 새로운 동작에 관한 자세한 내용은 PIP 모드 동작 개선사항을 참고하세요. 기능 구현에 관한 안내는 PIP 모드 지원을 참고하세요.

수신 전화의 중요도 순위 지정을 허용하는 새로운 전화 통화 알림

Android 12에서는 전화 통화의 새 알림 스타일 Notification.CallStyle을 추가합니다. 이 템플릿을 사용하면 앱이 상태 표시줄에 통화 시간을 보여주는 눈에 잘 띄는 칩을 표시하여 진행 중인 통화의 중요도를 나타낼 수 있습니다. 사용자는 이 칩을 탭하여 통화로 돌아갈 수 있습니다.

수신 전화와 진행 중인 통화가 사용자에게 가장 중요하므로 이러한 알림이 알림 창에서 최고 순위로 지정됩니다. 이 순위를 통해 시스템은 우선순위가 지정된 이러한 통화를 잠재적으로 다른 기기로 전달할 수 있습니다.

모든 유형의 통화에 다음 코드를 구현합니다.

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

자바

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

forIncomingCall()을 사용하여 수신 전화의 통화 스타일 알림을 만듭니다.

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

자바

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

forOngoingCall()을 사용하여 진행 중인 통화의 통화 스타일 알림을 만듭니다.

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

자바

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

forScreeningCall()을 사용하여 통화 선택을 위한 통화 스타일 알림을 만듭니다.

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

자바

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

개선된 알림 이미지 지원

Android 12에서는 이제 MessagingStyle()BigPictureStyle() 알림에 애니메이션 이미지를 제공하여 앱의 알림 환경을 개선할 수 있습니다. 이제 사용자가 알림 창의 메시지에 답장할 때 앱에서 이미지 메시지를 보낼 수도 있습니다.

동작 탐색을 위한 몰입형 모드 개선사항

Android 12에서는 사용자가 몰입형 모드에서 동작 탐색 명령어를 더 쉽게 실행하도록 기존 동작을 통합합니다. 또한 Android 12는 고정 몰입형 모드를 위한 이전 버전과의 호환성 동작을 제공합니다.

최근 URL 공유(Pixel만 해당)

Pixel 기기에서 이제 사용자는 최근 화면에서 바로 최근 본 웹 콘텐츠 링크를 공유할 수 있습니다. 앱의 콘텐츠를 방문한 후 사용자는 최근 화면으로 스와이프하여 콘텐츠를 본 앱을 찾은 후 링크 버튼을 탭하여 URL을 복사하거나 공유할 수 있습니다.

자세한 내용은 최근 URL 공유 사용 설정을 참고하세요.

보안 및 개인 정보 보호

개인 정보 대시보드

위치 정보에 액세스한 다양한 앱과 액세스가 발생한 시간을 보여주는 세로 타임라인
그림 1. 개인 정보 대시보드의 일부인 위치 사용 화면

Android 12 이상을 실행하는 지원되는 기기에서는 개인 정보 대시보드 화면이 시스템 설정에 표시됩니다. 이 화면에서 사용자는 앱이 위치나 카메라, 마이크 정보에 액세스할 때 표시되는 별도의 화면에 액세스할 수 있습니다. 각 화면에는 여러 앱이 특정 유형의 데이터에 액세스한 시점의 타임라인이 표시됩니다. 그림 1은 위치 정보 데이터 액세스 타임라인을 보여줍니다.

앱은 위치나 카메라, 마이크 정보에 액세스하는 이유를 알 수 있도록 사용자에게 근거를 제공할 수 있습니다. 이 근거는 새 개인 정보 대시보드 화면이나 앱의 권한 화면 또는 둘 다에 표시될 수 있습니다.

블루투스 권한

Android 12에서는 BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT 권한을 도입합니다. 이러한 권한을 사용하면 Android 12를 타겟팅하는 앱, 특히 기기 위치 액세스가 필요하지 않은 앱이 블루투스 기기와 더 쉽게 상호작용할 수 있습니다.

앱의 블루투스 권한 선언 업데이트

Android 12 이상을 타겟팅하도록 기기를 준비하려면 앱의 로직을 업데이트하세요. 기존 블루투스 권한 세트를 선언하는 대신 최신 블루투스 권한 세트를 선언합니다.

권한 그룹 조회

Android 12 이상에서는 시스템이 플랫폼 제공 권한을 권한 그룹으로 구성하는 방법을 쿼리할 수 있습니다.

애플리케이션 오버레이 창 숨기기

사용자가 개발자의 앱과 상호작용할 때 사용자에게 표시되는 내용을 개발자가 더 세밀하게 제어할 수 있도록 Android 12에서는 SYSTEM_ALERT_WINDOW 권한이 있는 앱이 그린 오버레이 창을 숨기는 기능을 도입합니다.

HIDE_OVERLAY_WINDOWS 권한을 선언한 후 앱에서는 setHideOverlayWindows()를 호출하여 TYPE_APPLICATION_OVERLAY 유형의 모든 창을 앱의 자체 창이 표시될 때 숨겨야 한다고 나타낼 수 있습니다. 앱은 트랜잭션 확인 흐름과 같은 민감한 화면을 표시할 때 이 작업을 실행할 수 있습니다.

TYPE_APPLICATION_OVERLAY 유형의 창이 표시되는 앱에서는 PIP 모드대화창과 같은 사용 사례에 더 적합할 수 있는 대안을 고려해야 합니다.

알려진 서명자 권한 보호 플래그

Android 12부터 서명 수준 권한knownCerts 속성을 통해 선언 시 알려진 서명 인증서의 다이제스트를 참조할 수 있습니다.

앱은 이 속성을 선언하고 knownSigner 플래그를 사용하여 기기와 앱이 기기 제조 및 배송 시 앱에 서명하지 않고도 다른 앱에 서명 권한을 부여하도록 허용할 수 있습니다.

기기 속성 증명

Android 12는 기기 속성을 확인할 수 있는 일련의 앱을 확장합니다. 기기 속성은 이러한 앱이 새 키를 생성할 때 증명 인증서에 있습니다.

Android 9(API 수준 28)부터 Keymaster 4.0 이상을 사용하는 기기 정책 소유자(DPO)는 이러한 증명 인증서에 있는 기기 속성을 확인할 수 있습니다. Android 12부터 Android 12(API 수준 31) 이상을 타겟팅하는 모든 앱은 setDevicePropertiesAttestationIncluded() 메서드를 사용하여 이 확인을 실행할 수 있습니다.

생성된 기기 속성에는 다음과 같은 Build 필드가 포함됩니다.

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

보안 잠금 화면 알림 작업

Android 12부터 Notification.Action.Builder 클래스는 setAuthenticationRequired() 메서드를 지원합니다. 이 메서드를 통해 앱에서 지정된 알림 작업을 호출하기 전에 기기가 잠금 해제되어야 한다고 요청할 수 있습니다 이 메서드를 사용하면 잠긴 기기의 알림에 보안 레이어를 추가할 수 있습니다.

현지화 가능한 BiometricPrompt 문자열

Android 12에서는 앱의 생체 인식 인증 사용자 환경을 개선할 수 있도록 새로운 API를 도입합니다. 새로운 BiometricManager.Strings 중첩 클래스에는 getButtonLabel(), getPromptMessage(), getSettingName() 메서드가 포함되어 있으며 이를 통해 사용자가 읽을 수 있는 현지화된 버튼 라벨이나 프롬프트 메시지, 앱 설정 이름을 앱이 검색할 수 있습니다. 이러한 라벨을 사용하여 '얼굴 인식 잠금 해제 사용'이나 '계속하려면 지문 사용'과 같이 사용된 생체 인식 인증 메서드와 관련된 사용자에게 표시되는 안내를 더 정확하게 만듭니다.

메시지 앱의 피싱 감지(Pixel만 해당)

의심스러운 메시지가 감지되면 사용자에게 이와 같은 메시지가 표시됩니다.

지원되는 Pixel 기기에서 Android 12는 인기 있는 메시지 앱에서 수신된 메시지에 피싱 감지를 실행합니다. 사용자가 이 기능을 사용 설정하면 시스템은 온디바이스 머신러닝을 사용하여 의심스러운 활동을 감지합니다. 의심스러운 활동이 감지되면 메시지 앱의 UI 위에 안전 오버레이를 표시하여 사용자에게 경고합니다. 예를 들어 피싱 감지에서는 사용자에게 다음과 같은 잠재적 위험을 경고할 수 있습니다.

  • 코드나 돈, 이와 유사한 것을 전송하라는 등의 의심스러운 요청
  • 신뢰할 수 없는 URL
  • 악성 첨부파일
  • 악성 앱 링크

사용자에게 경고하는 것 외에도 오버레이를 통해 사용자는 의심스러운 메시지를 신고하고 시스템에서 발생한 경고에 관한 의견을 제공할 수 있습니다.

개발자는 앱 매니페스트 파일에 com.google.android.ALLOW_PHISHING_DETECTION 문자열을 포함하는 새 메타데이터 태그를 추가하여 이 기능을 선택 해제할 수 있습니다. 예:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.as.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

미디어

호환 미디어 트랜스코딩

Android 12(API 수준 31)부터 시스템에서 기기에 녹화된 HEVC(H.265)HDR(HDR10 및 HDR10+) 동영상을 표준 플레이어와 널리 호환되는 형식인 AVC(H.264)로 자동 트랜스코딩할 수 있습니다. 이전 애플리케이션과의 호환성을 저하하지 않고 최신 코덱을 사용할 수 있을 때 이를 활용합니다.

자세한 내용은 호환 미디어 트랜스코딩을 참고하세요.

성능 등급

Android 12에서는 성능 등급이라는 표준을 도입합니다. 성능 등급은 Android의 기준 요구사항 이외의 하드웨어 기능을 지정합니다. 각 Android 기기는 지원하는 성능 등급을 선언합니다. 개발자는 런타임에 기기의 성능 등급을 확인하고 기기의 기능을 최대한 활용하는 업그레이드된 환경을 제공할 수 있습니다.

자세한 내용은 성능 등급을 참고하세요.

동영상 인코딩 개선사항

Android 12는 동영상 인코딩의 양자화 매개변수(QP) 값을 제어하는 표준 키 세트를 정의하므로 개발자가 공급업체별 코드를 방지할 수 있습니다.

새 키는 MediaFormat API와 NDK 미디어 라이브러리에서 사용할 수 있습니다.

Android 12부터 동영상 인코더는 최소 품질 기준점을 적용합니다. 따라서 사용자는 장면 복잡성이 높은 동영상을 인코딩할 때 매우 낮은 화질을 경험하지 않습니다.

오디오 포커스

Android 12(API 수준 31)부터 다른 앱이 포커스를 보유하고 재생 중인 동안 앱에서 오디오 포커스를 요청하면 시스템이 재생 중인 앱을 페이드 아웃합니다.

자세한 내용은 Android 12 이상의 오디오 포커스를 참고하세요.

MediaDrm 업데이트

현재 MediaDrm API에 보안 디코더 구성요소가 필요한지 확인하려면 다음 단계를 따라야 합니다.

  1. MediaDrm을 만듭니다.
  2. 세션을 열어 세션 ID를 가져옵니다.
  3. 세션 ID를 사용하여 MediaCrypto를 만듭니다.
  4. MediaCrypto.requiresSecureDecoderComponent(mimeType)를 호출합니다.

새 메서드 requiresSecureDecoder(@NonNull String mime)requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)를 사용하면 MediaDrm을 만드는 즉시 이를 확인할 수 있습니다.

카메라

Camera2 공급업체 확장 프로그램

Google의 기기 제조업체 파트너는 대부분 앱이 기기에서 차별화된 환경을 만드는 데 사용하길 바라는 맞춤 카메라 효과(빛망울 효과, HDR, 야간 모드 등)를 빌드했습니다. CameraX 라이브러리는 이미 공급업체 확장 프로그램 세트를 통해 이러한 맞춤 효과를 지원합니다. Android 12에서는 이제 이와 동일한 공급업체 확장 프로그램이 플랫폼에서 직접 노출됩니다.

이러한 추가 기능 덕분에 복잡한 Camera2 구현이 있는 앱에서 기존 코드를 크게 변경하지 않고도 확장 프로그램을 활용할 수 있습니다. Camera2 확장 API는 CameraX와 정확히 동일한 효과 세트를 노출하고 이는 이미 여러 다양한 기기에서 지원되므로 추가 구성 없이 사용할 수 있습니다.

자세한 내용은 CameraExtensionCharacteristics를 참고하세요.

Quad Bayer 카메라 센서 지원

오늘날 대부분의 Android 기기는 초고해상도 카메라 센서(일반적으로 Quad 또는 Nona Bayer 패턴)와 함께 제공되고 이러한 센서를 통해 이미지 품질과 저조도 성능 측면에서 유연성이 크게 향상됩니다. Android 12에서는 타사 앱이 이러한 다목적 센서를 최대한 활용할 수 있는 새 플랫폼 API를 도입합니다. 새 API는 이러한 센서의 고유한 동작을 지원하고 '기본' 모드와 비교하여 전체 해상도 또는 '최대 해상도' 모드에서 작동할 때 여러 스트림 구성 및 조합을 지원할 수 있음을 고려합니다.

그래픽과 이미지

앱에 Tombstone 트레이스 직접 액세스 권한 제공

Android 12부터는 ApplicationExitInfo.getTraceInputStream() 메서드를 통해 프로토콜 버퍼로 앱의 네이티브 충돌 Tombstone에 액세스할 수 있습니다. 프로토콜 버퍼는 이 스키마를 사용하여 직렬화됩니다. 이전에는 Android 디버그 브리지(adb)를 통해서만 이 정보에 액세스할 수 있었습니다.

자세한 내용은 앱에 Tombstone 트레이스 직접 액세스 권한 제공을 참고하세요.

AVIF 이미지 지원

Android 12는 AV1 이미지 파일 형식(AVIF)을 사용하는 이미지를 지원합니다. AVIF는 AV1을 사용하여 인코딩된 이미지 및 이미지 시퀀스의 컨테이너 형식입니다. 동영상 압축에서 프레임 내 인코딩 콘텐츠를 활용합니다. 이렇게 하면 JPEG와 같은 기존 이미지 형식과 비교할 때 동일한 파일 크기의 이미지 품질이 크게 향상됩니다. 이 형식의 장점에 관한 자세한 내용은 제이크 아치볼드의 블로그 게시물을 참고하세요.

더 간단한 블러, 색상 필터, 기타 효과

Android 12에서는 블러, 색상 필터, Android 셰이더 효과 등 일반적인 그래픽 효과를 View 및 렌더링 계층 구조에 적용하는 새 RenderEffect를 추가합니다. 효과는 체인 효과(내부 및 외부 효과를 구성)나 혼합 효과로 결합할 수 있습니다. 다양한 Android 기기가 제한된 처리 성능으로 인해 이 기능을 지원할 수도 지원하지 못할 수도 있습니다.

View.setRenderEffect(RenderEffect)를 호출하여 View의 기본 RenderNode에 효과를 적용할 수도 있습니다.

RenderEffect를 구현하려면 다음을 실행하세요.

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

네이티브 애니메이션 이미지 디코딩

Android 12에서 NDK ImageDecoder API는 애니메이션 GIF 및 애니메이션 WebP 파일 형식을 사용하는 이미지의 모든 프레임과 타이밍 데이터를 디코딩하도록 확장되었습니다. Android 11에서 처음 도입되었을 때 이 API는 이러한 형식의 애니메이션에서 첫 번째 이미지만 디코딩했습니다.

타사 라이브러리 대신 ImageDecoder를 사용하여 APK 크기를 더 줄이고 보안 및 성능 관련 향후 업데이트의 이점을 누리세요.

API에 관한 자세한 내용은 API 참조GitHub의 샘플을 참고하세요.

연결성

호환 앱을 켠 상태로 유지

기기 관리를 위해 계속 실행되는 호환 앱의 필요성을 지원하기 위해 Android 12에서는 다음 작업을 실행하는 API를 도입합니다.

  • 부속 기기가 범위 내에 있을 때 앱의 절전 모드를 해제할 수 있습니다.
  • 기기가 범위 내에 있는 동안 프로세스가 계속 실행되도록 보장합니다.

API를 사용하려면 부속 기기 관리도구를 사용하여 기기를 연결해야 합니다. 자세한 내용은 CompanionDeviceManager.startObservingDevicePresence()CompanionDeviceService.onDeviceAppeared()를 참고하세요.

호환 기기 관리도구 프로필

호환 기기 프로필을 사용하여 단일 요청으로 여러 권한을 요청하는 권한 대화상자입니다.

Android 12(API 수준 31) 이상 버전에서 실행되는 파트너 앱은 시계에 연결할 때 호환 기기 프로필을 사용할 수 있습니다. 프로필을 사용하면 기기 유형별 권한 세트 부여를 한 단계로 묶어 등록 프로세스를 간소화할 수 있습니다.

번들 권한은 기기가 연결되면 호환 앱에 부여되고 기기가 연결된 동안에만 지속됩니다. 앱을 삭제하거나 연결을 제거하면 권한이 삭제됩니다.

자세한 내용은 AssociationRequest.Builder.setDeviceProfile()을 참고하세요.

대역폭 추정 개선

Android 12에서는 getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps()에서 제공하는 대역폭 추정 기능이 Wi-Fi 및 모바일 데이터 연결에서 모두 개선됩니다. 이제 반환된 값은 기기의 모든 애플리케이션에서 이동통신사 또는 Wi-Fi SSID당 가중치가 적용된 사용자의 전체 기간 평균 처리량과 네트워크 유형, 신호 수준을 나타냅니다. 이렇게 하면 예상 처리량의 더 정확하고 현실적인 추정치를 반환하고 애플리케이션 콜드 스타트에 관한 추정치를 제공할 수 있어 다른 처리량 추정 메서드 사용과 비교할 때 더 적은 주기가 필요합니다.

Wi-Fi Aware(NAN) 개선사항

Android 12에서는 Wi-Fi Aware를 다음과 같이 개선했습니다.

  • Android 12(API 수준 31) 이상을 실행하는 기기에서는 onServiceLost() 콜백을 사용하여 서비스가 중지되거나 범위를 벗어나서 앱이 검색된 서비스를 손실했을 때 알림을 받을 수 있습니다.
  • 여러 데이터 경로(NAN 데이터 경로)를 설정하는 방식은 더 효율적으로 변경됩니다. 이전 버전에서는 L2 메시지를 사용하여 시작자의 피어 정보를 교환했으며 이로 인해 지연 시간이 발생했습니다. Android 12 이상을 실행하는 기기에서는 응답자(서버)가 모든 피어를 수락하도록 구성될 수 있습니다. 즉, 시작자 정보를 미리 알지 않아도 됩니다. 이를 통해 데이터 경로 불러오기 속도가 빨라지고 단 한 번의 네트워크 요청으로 여러 지점 간 링크를 사용 설정할 수 있습니다.
  • 프레임워크가 리소스 부족으로 검색 또는 연결 요청을 거부하지 않도록 하려면 Android 12 이상을 실행하는 기기에서 WifiAwareManager.getAvailableAwareResources()를 호출하면 됩니다. 이 메서드의 반환 값을 통해 사용 가능한 데이터 경로 수, 사용 가능한 게시 세션 수, 사용 가능한 구독 세션 수를 가져올 수 있습니다.

동시 P2P + 인터넷 연결

Android 12(API 수준 31) 이상을 타겟팅하는 기기가 하드웨어 지원 기기에서 실행되는 경우 P2P 연결을 사용하면 피어 기기 연결을 만들 때 기존 Wi-Fi 연결이 해제되지 않습니다. 이 기능 지원을 확인하려면 WifiManager.isMultiStaConcurrencySupported()를 사용하세요.

NFC 결제에 화면 끄기 사용 설정

Android 12 이상을 타겟팅하는 앱에서는 requireDeviceScreenOnfalse로 설정하여 기기 화면이 켜지지 않은 상태에서 NFC 결제를 사용 설정할 수 있습니다. 꺼진 화면이나 잠금 화면에서 NFC 결제에 관한 자세한 내용은 꺼진 화면 및 잠금 화면 동작을 참고하세요.

저장용량

Android 12에서는 다음과 같은 저장용량 관리 기능을 도입합니다.

핵심 기능

자동 앱 업데이트

Android 12에서는 PackageInstaller API를 사용하는 앱을 위한 setRequireUserAction() 메서드를 도입합니다. 이 메서드를 사용하면 설치 프로그램 앱이 사용자에게 작업 확인을 요청하지 않고도 앱 업데이트를 실행할 수 있습니다.

기기 칩셋 정보

Android 12에서는 SDK를 통해 SoC 칩셋 공급업체와 모델 정보를 노출하는 상수 두 개를 android.os.Build에 추가합니다. 이 정보는 Build.SOC_MANUFACTURERBuild.SOC_MODEL을 각각 호출하여 검색할 수 있습니다.

핵심 자바 API 업데이트

요청 및 개발자와의 협업을 바탕으로 Google에서는 다음 핵심 라이브러리를 Android 12에 추가했습니다.

클래스 API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime