The Android Developer Challenge is back! Submit your idea before December 2.

Android 10의 개인정보 보호 변경사항

Android 10(API 레벨 29)에는 사용자의 개인정보 보호 강화를 위해 많은 기능과 동작 변경사항이 도입되었습니다. 따라서 사용자가 앱에 제공하는 데이터와 기능을 더욱 투명하고 세밀하게 제어할 수 있습니다. 이에 따라 앱이 의존하는 특정 동작이나 데이터가 이전 버전의 플랫폼과 다르게 작동할 수도 있습니다. 앱이 사용자 데이터 처리에 관한 최신 권장사항을 따르는 경우에는 앱에 미치는 영향이 최소화됩니다.

이 페이지에는 각 변경사항이 요약되어 있습니다.

주요 변경사항

이 섹션에는 개인정보 보호와 관련된 Android 10의 주요 변경사항이 포함되어 있습니다.

앱 파일 및 미디어로 범위가 지정된 외부 저장소 액세스

기본적으로 Android 10 이상을 타겟팅하는 앱에는 외부 저장소로 범위가 지정된 액세스, 즉 범위 지정 저장소가 제공됩니다. 이러한 앱은 저장소 관련 사용자 권한을 요청하지 않고도 외부 저장소 기기 내에서 다음 유형의 파일을 볼 수 있습니다.

범위 지정 저장소, 그리고 외부 저장소 기기에 저장된 파일을 공유, 액세스, 수정하는 방법에 관한 자세한 내용은 외부 저장소의 파일 관리미디어 파일 액세스 및 수정 방법에 관한 가이드를 참조하세요.

백그라운드에서 기기 위치에 액세스하려면 권한이 필요

사용자가 앱의 위치 정보 액세스를 더 세밀하게 관리할 수 있도록 지원하기 위해 Android 10에 ACCESS_BACKGROUND_LOCATION 권한이 도입되었습니다.

ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 권한과는 달리 ACCESS_BACKGROUND_LOCATION 권한은 앱이 백그라운드에서 실행될 때 앱의 위치 액세스에만 영향을 줍니다. 다음 조건 중 하나가 충족되지 않으면 앱은 백그라운드에서 위치에 액세스하는 것으로 간주됩니다.

  • 앱에 속한 활동이 표시됩니다.
  • 앱이 location포그라운드 서비스 유형을 선언한 포그라운드 서비스를 실행 중입니다.

    앱에서 서비스의 포그라운드 서비스 유형을 선언하려면 앱의 targetSdkVersion 또는 compileSdkVersion29 이상으로 설정합니다. 포그라운드 서비스가 위치에 액세스해야 하는 사용자 시작 작업을 계속할 수 있는 방법을 알아보세요.

Android 9 이하를 타겟팅할 때 자동으로 부여되는 액세스

앱이 Android 10 이상에서 실행되지만 Android 9(API 레벨 28) 이하를 타겟팅하는 경우 플랫폼은 다음 동작을 적용합니다.

  • 앱에서 ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION<uses-permission> 요소를 선언하면 설치 중에 자동으로 <uses-permission> 요소가 ACCESS_BACKGROUND_LOCATION에 추가됩니다.
  • 앱에서 ACCESS_FINE_LOCATION 또는 ACCESS_COARSE_LOCATION을 요청하면 자동으로 요청에 ACCESS_BACKGROUND_LOCATION이 추가됩니다.

기기가 Android 10으로 업그레이드될 경우의 액세스

사용자가 기기 위치에 액세스할 수 있는 권한(ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION)을 앱에 부여하고 기기를 Android 9에서 Android 10으로 업그레이드하면 앱에 부여된 위치 기반 권한 집합이 자동으로 업데이트됩니다. 업그레이드 이후 앱이 받는 권한 집합은 다음 표와 같이 타겟 SDK 버전 및 정의된 권한에 따라 다릅니다.

표 1. 기기를 Android 10으로 업그레이드한 후 위치 정보 액세스 권한 상태 변경사항

타겟 플랫폼 버전 대략적 또는 세부
권한 부여 여부
manifest에 백그라운드
권한 정의 여부
업데이트된 기본 권한 상태
Android 10 포그라운드 및 백그라운드 액세스
Android 10 아니요 포그라운드 액세스만
Android 10 아니요 (시스템에 의해 무시됨) 액세스 권한 없음
Android 9 이하 기기 업그레이드 시 시스템에 의해 자동 추가됨 포그라운드 및 백그라운드 액세스
Android 9 이하 아니요 (시스템에 의해 무시됨) 액세스 권한 없음

앱이 백그라운드에 있는 동안 기기의 위치를 검색하는 방법에 관한 자세한 내용은 주기적인 위치 업데이트 수신 관련 가이드를 참조하세요.

백그라운드에서 활동 시작에 관한 제한사항

Android 10부터 백그라운드에서 활동을 시작하는 데 제한이 적용됩니다. 이에 따라 사용자의 작업이 중단되는 상황을 최소화하고 사용자가 화면에 표시되는 내용을 더 자세히 제어할 수 있습니다. 사용자 상호작용의 직접적인 결과로 활동을 시작하는 앱은 이러한 제한사항의 영향을 거의 받지 않습니다.

백그라운드에서 활동을 시작하는 것에 대한 대안으로 권장되는 방법은 앱에서 시간에 민감한 이벤트를 사용자에게 알리는 방법 관련 가이드를 참조하세요.

식별자 및 데이터

이 섹션에는 기기 식별자 및 데이터 작업과 관련된 변경사항이 나열되어 있습니다.

관심 연락처 제거

Android 10부터 플랫폼에서는 관심 연락처 정보를 추적하지 않습니다. 따라서 앱이 사용자의 연락처를 검색하는 경우, 결과가 상호작용 빈도별로 정렬되지 않습니다.

ContactsProvider에 관한 가이드에는 Android 10부터 모든 기기에서 지원 중단되는 특정 필드 및 메서드를 설명하는 알림이 포함됩니다.

무작위 MAC 주소

Android 10 이상을 실행하는 기기에서 시스템은 기본적으로 무작위 MAC 주소를 전송합니다.

앱이 엔터프라이즈 사용 사례를 처리하면 플랫폼은 MAC 주소와 관련된 여러 작업의 API를 제공합니다.

  • 무작위 MAC 주소 확인: 기기 소유자 앱과 프로필 소유자 앱에서는 getRandomizedMacAddress()를 호출하여 특정 네트워크에 할당된 무작위 MAC 주소를 검색할 수 있습니다.
  • 실제 공장 출고 시 MAC 주소 확인: 기기 소유자 앱에서는 getWifiMacAddress()를 호출하여 기기의 실제 하드웨어 MAC 주소를 검색할 수 있습니다. 이 메소드는 기기 집합을 추적하는 데 유용합니다.

/proc/net 파일 시스템 액세스 제한

Android 10 이상이 실행되는 기기에서 앱은 기기의 네트워크 상태 정보가 포함된 /proc/net에 액세스할 수 없습니다. VPN과 같이 이 정보에 액세스해야 하는 앱은 NetworkStatsManager 또는 ConnectivityManager 클래스를 사용해야 합니다.

재설정할 수 없는 기기 식별자 제한

Android 10부터는 IMEI 및 일련번호를 포함해 기기의 재설정할 수 없는 식별자에 액세스하려면 앱에 READ_PRIVILEGED_PHONE_STATE 독점 권한이 있어야 합니다.

영향 받는 메서드는 다음과 같습니다.

앱에 권한이 없지만 재설정할 수 없는 식별자에 관한 정보를 요청하려는 경우 플랫폼의 응답은 타겟 SDK 버전에 따라 달라집니다.

  • 앱에서 Android 10 이상을 타겟팅하면 SecurityException이 발생합니다.
  • 앱에서 Android 9(API 레벨 28) 이하를 타겟팅하면 메서드가 null을 반환하거나, 앱에 READ_PHONE_STATE 권한이 있는 경우 자리표시자 데이터를 반환합니다. 그러지 않으면 SecurityException이 발생합니다.

재설정할 수 없는 기기 식별자가 필요하지 않은 사용 사례도 많습니다. 앱에서 광고 추적이나 사용자 분석을 위해 재설정할 수 없는 기기 식별자를 사용하는 경우에는 특정 사용 사례의 Android 광고 ID를 만드세요. 자세한 내용은 고유 식별자 권장사항을 참조하세요.

클립보드 데이터 액세스 제한

앱이 입력 방식 편집기(IME)이거나 현재 포커스가 있는 앱이 아닌 경우에는 앱에서 Android 10 이상의 클립보드 데이터에 액세스할 수 없습니다.

USB 기기 일련번호 보호

Android 10 이상을 타겟팅하는 앱은 사용자가 USB 기기 또는 액세서리에 액세스할 권한을 앱에 부여할 때까지 일련번호를 읽을 수 없습니다.

USB 기기로 작업하는 방법에 관해 자세히 알아보려면 USB 호스트 구성 방법 관련 가이드를 참조하세요.

카메라 및 연결

이 섹션에는 카메라 메타데이터 및 연결 API와 관련된 변경사항이 나열되어 있습니다.

카메라 세부정보 및 메타데이터 액세스 제한

Android 10에서는 getCameraCharacteristics() 메서드가 기본적으로 반환하는 정보의 범위가 변경되었습니다. 특히 이 메서드의 반환 값에 포함된 기기별 메타데이터에 액세스할 수 있으려면 앱에 CAMERA 권한이 있어야 합니다.

이러한 변경사항에 관한 자세한 내용은 권한이 필요한 카메라 필드 섹션을 참조하세요.

Wi-Fi 사용 및 중지 관련 제한사항

Android 10 이상을 타겟팅하는 앱은 Wi-Fi를 사용 설정 또는 사용 중지할 수 없습니다. WifiManager.setWifiEnabled() 메서드는 항상 false를 반환합니다.

사용자에게 Wi-Fi를 사용 설정 또는 사용 중지하라는 메시지를 표시해야 하는 경우 설정 패널을 사용하세요.

구성된 Wi-Fi 네트워크 직접 액세스 제한

사용자 개인정보 보호를 위해 Wi-Fi 네트워크 목록의 수동 구성이 이제 시스템 앱과 기기 정책 컨트롤러(DPC)로 제한됩니다. 지정된 DPC는 기기 소유자 또는 프로필 소유자일 수 있습니다.

앱이 시스템 앱이나 DPC가 아니고 Android 10 이상을 타겟팅하는 경우 다음 메서드는 유용한 데이터를 반환하지 않습니다.

앱이 Wi-Fi 네트워크에 연결되어야 하는 경우에는 다음 대체 메서드를 사용합니다.

  • Wi-Fi 네트워크에 관한 즉각적인 로컬 연결을 트리거하려면 표준 NetworkRequest 객체에서 WifiNetworkSpecifier를 사용합니다.
  • 사용자에게 인터넷 액세스를 제공하기 위해 고려할 Wi-Fi 네트워크를 추가하려면 WifiNetworkSuggestion 객체를 사용합니다. addNetworkSuggestions()removeNetworkSuggestions()를 각각 호출하여 자동 연결 네트워크 선택 대화상자에 표시되는 네트워크를 추가하고 삭제할 수 있습니다. 이러한 메서드에는 위치 정보 액세스 권한이 필요하지 않습니다.

전화 통신, 블루투스, Wi-Fi API에 FINE 위치 정보 액세스 권한 필요

Android 10 이상을 타겟팅하는 앱이 Wi-Fi, Wi-Fi Aware 또는 블루투스 API 내에서 여러 메서드를 사용하려면 ACCESS_FINE_LOCATION 권한이 필요합니다. 다음 섹션에는 영향을 받는 클래스와 메서드가 나열되어 있습니다.

전화 통신

Wi-Fi

블루투스

권한

이 섹션에서는 Android 권한 모델의 업데이트에 관해 설명합니다.

화면 콘텐츠에 대한 제한된 액세스

사용자 화면 콘텐츠 보호를 위해 Android 10에서는 READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT 권한의 범위를 변경하여 기기의 화면 콘텐츠에 자동으로 액세스하는 것을 차단합니다. Android 10부터는 이러한 권한이 서명 액세스 전용입니다.

기기의 화면 콘텐츠에 액세스해야 하는 앱에서는 사용자에게 동의하는지 묻는 메시지를 표시하는 MediaProjection API를 사용해야 합니다.

레거시 앱에서 사용자 표시 권한 확인

앱이 Android 5.1(API 레벨 22) 이하를 타겟팅하는 경우 사용자가 Android 10 이상을 실행하는 기기에서 앱을 처음 사용하면 그림 1과 같은 권한 화면이 표시됩니다. 이 화면에서 사용자는 이전에 설치 시 시스템이 앱에 부여한 액세스 권한을 취소할 수 있습니다.

대화상자의 화면 캡처
그림 1. 레거시 권한 검토를 허용하는 사용자 표시 대화상자

실제 활동 감지

Android 10에는 사용자의 걸음 수를 인식하거나 걷기, 자전거 타기, 자동차로 이동하기와 같은 사용자의 신체적 활동을 분류해야 하는 앱에 사용할 새 ACTIVITY_RECOGNITION 런타임 권한이 도입되었습니다. 이 권한은 설정에서 기기 센서 데이터가 사용되는 방식을 사용자에게 보여 주도록 설계되었습니다.

Activity Recognition APIGoogle Fit API와 같은 Google Play 서비스 내 일부 라이브러리에서는 사용자가 앱에 이 권한을 부여한 경우에만 결과를 제공합니다.

이 권한을 선언해야 하는 기기의 유일한 내장 센서걸음수 측정기걸음 감지기 센서입니다.

앱에서 Android 9(API 레벨 28) 이하를 타겟팅하고 앱의 매니페스트 파일에 com.google.android.gms.permission.ACTIVITY_RECOGNITION 권한을 지정하면 시스템에서 필요한 경우 자동으로 앱에 이 권한을 부여합니다. Android 10을 타겟팅하는 앱을 업데이트하면 플랫폼에서 권한이 유지됩니다. 하지만 사용자는 언제든지 시스템 설정에서 이 권한을 취소할 수 있습니다.

UI에서 제거된 권한 그룹

Android 10부터 앱은 UI에서 권한을 그룹화하는 방법을 찾을 수 없습니다.