Android 12 개발자 프리뷰에 오신 것을 환영합니다. 초기에 자주 의견을 제공하여 Android 12를 최고의 버전으로 만들도록 도와주세요.

동작 변경사항: 모든 앱

Android 12 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion과 관계없이 Android 12에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.

또한 Android 12를 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.

사용자 환경

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

Android 12에서는 몰입형 모드를 간소화하여 동작 탐색이 더 쉬워지고 동영상 보기 및 책 읽기와 같은 나머지 활동 환경과의 일관성이 높아집니다. 앱은 여전히 전체 화면 게임 환경에서 실수로 인한 동작을 방지하므로 사용자가 게임 중에 실수로 게임을 종료하지 않도록 합니다. 이제 다른 모든 전체 화면 또는 몰입형 환경에서는 사용자가 스와이프 한 번으로 휴대전화를 탐색할 수 있습니다.

이를 위해 비고정 몰입형 환경의 기존 동작(BEHAVIOR_SHOW_BARS_BY_TOUCH, BEHAVIOR_SHOW_BARS_BY_SWIPE)이 Android 12부터 지원 중단됩니다. 시스템 표시줄을 숨길 때 스와이프 한 번으로 동작을 허용하는 기본 동작(BEHAVIOR_DEFAULT)으로 대체되었습니다. 이 플래그는 모드에 따라 다른 시각적 동작과 기능적 동작을 보여 줍니다.

  • 3버튼 모드에서 시각적 및 기능적 동작은 12 이전 Android 버전의 몰입형 모드와 동일합니다.
  • 동작 탐색 모드에서 동작은 다음과 같습니다.
    • 시각적으로 Android 11 이하의 몰입형 모드와 동일합니다.
    • 기능적으로 동작은 표시줄이 숨겨져 있어도 허용됩니다. 시스템 뒤로 기능은 Android 11에 필요했던 스와이프 두 번이 아닌 한 번만 스와이프하여 호출하면 됩니다. 알림바를 아래로 이동하거나 홈으로 이동하기 위해 추가로 스와이프할 필요가 없습니다.

고정 몰입형 모드(BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE)는 Android 12에서 변경되지 않았습니다. 이 기능의 다음과 같은 이전 버전과의 호환성에 유의하세요.

포그라운드 서비스 알림 지연

Android 12에서 단기 실행 포그라운드 서비스에 간소화된 환경을 제공하기 위해 시스템은 특정 포그라운드 서비스의 포그라운드 서비스 알림 표시를 10초 지연시킬 수 있습니다. 이 변경사항으로 알림이 표시되기 전에 단기 실행 작업이 완료될 수 있습니다.

포그라운드 서비스에 다음 특성 중 하나 이상이 있으면 시스템에서는 서비스가 시작된 직후 연결된 알림을 표시합니다.

  • 서비스가 작업 버튼이 포함된 알림과 연결됩니다.
  • 서비스에 connectedDevice, mediaPlayback, mediaProjection 또는 phoneCallforegroundServiceType이 있습니다.
  • 서비스는 알림의 카테고리 속성에 정의된 전화 통화, 탐색 또는 미디어 재생과 관련된 사용 사례를 제공합니다.

  • 이 서비스는 알림을 설정할 때 setShowForegroundImmediately()를 호출하여 동작 변경사항을 선택 해제했습니다.

개인정보 보호

Netlink MAC 주소 제한사항

Android 12에서는 타겟 API 수준과 상관없이 모든 비 시스템 앱의 재설정할 수 없는 식별자인 기기의 MAC 주소 액세스를 추가로 제한합니다.

관련 API는 앱의 타겟 SDK 버전에 따라 비어 있는 값이나 자리표시자 값을 반환합니다.

  • 앱이 Android 12를 타겟팅하면 API는 null을 반환합니다.
  • 앱이 Android 11 이하를 타겟팅하면 API는 하드 코딩 자리표시자 값을 반환합니다. 02:00:00:00:00:00

개발자는 NetworkInterface, getifaddrs() 또는 Netlink 소켓과 같은 하위 수준 API 대신 ConnectivityManager를 사용해야 합니다. 개발자가 코드에서 NetworkInterface.getHardwareAddress()를 호출하면 logcat 출력에 다음이 표시됩니다. CompatibilityChangeReporter: Compat change id reported: 170188668;

개발자는 RETURN_NULL_HARDWARE_ADDRESS라는 호환성 플래그를 사용하여 NetworkInterface.getHardwareAddress() 동작을 사용 설정된 경우 null을 반환하거나 사용 중지된 경우 02:00:00:00:00:00을 반환하도록 전환할 수 있습니다.

보안

신뢰할 수 없는 터치 이벤트가 차단됨

시스템 보안 및 우수한 사용자 환경을 유지하기 위해 Android 12에서는 오버레이가 안전하지 않은 방식으로 앱을 가리는 터치 이벤트를 앱에서 사용하지 못하도록 합니다. 즉, 시스템은 몇 가지 예외를 제외하고 특정 창을 통과하는 터치를 차단합니다.

영향을 받은 앱

이 변경사항은 FLAG_NOT_TOUCHABLE 플래그 등을 사용하여 터치가 창을 통과할 수 있도록 하는 앱에 영향을 줍니다. 이러한 예에는 다음이 포함되나 이에 국한되지 않습니다.

예외

다음과 같은 경우에는 '패스 스루' 터치가 허용됩니다.

  • 앱 내 상호작용. 앱에서 오버레이를 표시하면 오버레이는 사용자가 앱과 상호작용할 때만 표시됩니다.
  • 신뢰할 수 있는 창. 이러한 창에는 다음이 포함되지만 이에 국한되지 않습니다.

  • 표시되지 않는 창. 창의 루트 뷰가 GONE 또는 INVISIBLE입니다.

  • 완전히 투명한 창. 창의 alpha 속성이 0.0입니다.

  • 충분한 반투명 시스템 알림 창. 시스템은 결합된 불투명도가 시스템의 최대 터치 불투명도보다 작거나 같을 때 일련의 시스템 알림 창이 충분히 반투명하다고 간주합니다. 개발자 프리뷰 1에서 최대 불투명도는 0.8이지만 이 값은 나중에 개발자 프리뷰에서 변경될 수 있습니다.

신뢰할 수 없는 터치가 차단된 경우 감지

터치 작업을 시스템에서 차단하면 Logcat에서는 다음 메시지를 기록합니다.

Untrusted touch due to occlusion by PACKAGE_NAME

변경사항 테스트

신뢰할 수 없는 터치는 Android 12 개발자 프리뷰 1을 실행하는 기기에서 기본적으로 차단됩니다. 신뢰할 수 없는 터치를 허용하려면 터미널 창에서 다음 ADB 명령어를 실행합니다.

# A specific app
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.app

# All apps
# If you'd still like to see a Logcat message warning when a touch would be
# blocked, use 1 instead of 0.
adb shell settings put global block_untrusted_touches 0

이 동작을 기본값(신뢰할 수 없는 터치가 차단됨)으로 되돌리려면 다음 명령어를 실행합니다.

# A specific app
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.app

# All apps
adb shell settings put global block_untrusted_touches 2

앱이 시스템 대화상자를 닫을 수 없음

앱 및 시스템과 상호작용할 때 사용자 제어를 개선하기 위해 Android 12부터 ACTION_CLOSE_SYSTEM_DIALOGS 인텐트 작업이 지원 중단됩니다. 특수한 사례를 제외하고 앱이 이 작업이 포함된 인텐트를 호출하려고 하면 시스템은 앱의 타겟 SDK 버전에 따라 다음 중 하나를 실행합니다.

  • 앱이 Android 12를 타겟팅하면 SecurityException이 발생합니다.
  • 앱이 Android 11(API 수준 30) 이하를 타겟팅하면 인텐트가 실행되지 않고 다음 메시지가 Logcat에 표시됩니다.

    E ActivityTaskManager Permission Denial: \
    android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from \
    com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \
    dropping broadcast.
    

예외

다음과 같은 경우 앱은 여전히 Android 12에서 시스템 대화상자를 닫을 수 있습니다.

  • 앱이 계측 테스트를 실행 중입니다.
  • 앱이 Android 11 이하를 타겟팅하고 알림 창 위에 있는 창을 표시합니다.

  • 앱이 Android 11 이하를 타겟팅합니다. 또한 사용자가 알림의 작업 버튼을 사용하여 알림과 상호작용했으며 앱은 사용자 작업에 응답하여 서비스broadcast receiver를 처리하고 있습니다.

비 SDK 인터페이스 제한사항

Android 12에는 Android 개발자와의 공동작업 및 최신 내부 테스트를 기반으로 제한된 비 SDK 인터페이스의 업데이트된 목록이 포함되어 있습니다. 가능하면 Google은 비 SDK 인터페이스를 제한하기 전에 공개 대안을 사용할 수 있게 합니다.

Android 12를 타겟팅하지 않는 앱의 경우 이러한 변경사항 중 일부는 개발자에게 곧바로 영향을 주지 않을 수도 있습니다. 그러나 현재 앱의 타겟 API 수준에 따라 일부 비 SDK 인터페이스를 사용할 수 있지만 비 SDK 메서드 또는 필드를 사용하면 항상 앱이 중단될 위험성이 높아집니다.

앱에서 비 SDK 인터페이스를 사용하는지 확실히 알 수 없는 경우 앱을 테스트하여 확인할 수 있습니다. 앱에서 비 SDK 인터페이스를 사용하는 경우 대체 SDK로의 이전을 계획해야 합니다. 일부 앱의 경우 비 SDK 인터페이스 사용에 관한 유효한 사용 사례가 있음을 알고 있습니다. 앱 기능을 구현하기 위해 비 SDK 인터페이스 대신 무엇을 사용해야 할지 알 수 없다면 새 공개 API를 요청해야 합니다.

이 Android 버전의 변경사항을 자세히 알아보려면 Android 12의 비 SDK 인터페이스 제한사항 업데이트를 참고하세요. 비 SDK 인터페이스에 관해 전반적으로 알아보려면 비 SDK 인터페이스 제한사항을 참고하세요.