Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Android 11의 저장소 업데이트

Android 11(API 수준 30)에서는 플랫폼을 한층 더 강화하여 외부 저장소의 앱 및 사용자 데이터를 더욱 안전하게 보호합니다. 이 버전에는 미디어의 원시 파일 경로 액세스 선택, 미디어의 일괄 수정 작업, 저장소 액세스 프레임워크의 업데이트된 UI 등 여러 향상된 기능이 도입되었습니다.

또한 이 버전에서는 범위 지정 저장소 관련 개선사항을 제공합니다. 따라서 개발자는 이 저장소 모델을 사용하여 쉽게 이전할 수 있습니다. 자세한 내용은 Android 저장소 사용 사례 및 권장사항 가이드와 Android 11 저장소 FAQ라는 Medium 기사를 참조하세요.

범위 지정 저장소 적용

Android 11에서 실행되지만 Android 10(API 수준 29)을 타겟팅하는 앱은 여전히 requestLegacyExternalStorage 속성을 요청할 수 있습니다. 이 플래그를 사용하면 앱은 다양한 디렉터리 및 다양한 미디어 파일 유형에 관한 액세스 권한을 부여하는 등 범위 지정 저장소와 관련된 변경사항을 일시적으로 선택 해제할 수 있습니다. Android 11을 타겟팅하도록 앱을 업데이트하면 시스템에서 requestLegacyExternalStorage 플래그를 무시합니다.

Android 10과 호환성 유지

앱이 Android 10 기기에서 실행될 때 범위 지정 저장소를 선택 해제하는 경우 앱의 매니페스트 파일에서 requestLegacyExternalStoragetrue로 계속 설정하는 것이 좋습니다. 이렇게 하면 Android 10을 실행하는 기기에서 앱이 예상대로 계속 동작할 수 있습니다.

범위 지정 저장소 사용 시 표시되는 디렉터리로 데이터 이전

앱이 레거시 저장소 모델을 사용하고 이전에 Android 10 이하를 타겟팅했다면 범위 지정 저장소 모델이 사용 설정되었을 때 앱이 액세스할 수 없는 디렉터리에 데이터를 저장할 수 있습니다. Android 11을 타겟팅하기 전에 먼저 범위 지정 저장소와 호환되는 디렉터리로 데이터를 이전합니다.

범위 지정 저장소 테스트

앱의 타겟 SDK 버전 및 매니페스트 플래그 값과 관계없이 앱의 범위 지정 저장소를 사용 설정하려면 다음 앱 호환성 플래그를 사용 설정하세요.

범위 지정 저장소를 사용 중지하고 대신 레거시 저장소 모델을 사용하려면 두 플래그를 모두 설정 해제하세요.

기기 저장용량 관리

Android 11부터 범위 지정 저장소 모델을 사용하는 앱은 자체 앱별 캐시 파일에만 액세스할 수 있습니다. 앱이 기기 저장용량을 관리해야 한다면 여유 공간 쿼리 방법에 관한 안내를 따릅니다.

  1. ACTION_MANAGE_STORAGE 인텐트 작업을 호출하여 여유 공간을 확인합니다.
  2. 기기에 여유 공간이 충분하지 않다면 앱에서 모든 캐시를 지우는 데 동의하라는 메시지를 사용자에게 표시합니다. 메시지를 표시하려면 ACTION_CLEAR_APP_CACHE 인텐트 작업을 호출합니다.

외부 저장소의 앱별 디렉터리

Android 11부터 앱은 외부 저장소에 자체 앱별 디렉터리를 생성할 수 없습니다. 시스템에서 앱에 제공하는 디렉터리에 액세스하려면 getExternalFilesDirs()를 호출합니다.

미디어 파일 액세스

사용자 개인정보 보호를 유지하면서도 더 간편하게 미디어에 액세스하도록 Android 11은 다음 기능을 추가합니다.

일괄 작업 실행

기기 간 일관성과 사용자 편의성 강화를 위해 Android 11에는 미디어 파일 그룹을 더 쉽게 관리할 수 있는 여러 메서드가 추가되었습니다.

직접 파일 경로 및 네이티브 라이브러리를 사용하여 파일에 액세스

앱이 타사 미디어 라이브러리와 더 원활하게 호환될 수 있도록 Android 11에서는 MediaStore API 이외의 API를 사용하여 직접 파일 경로를 통해 공유 저장소의 미디어 파일에 액세스할 수 있습니다. 이러한 API에는 다음이 포함됩니다.

  • File API
  • 네이티브 라이브러리(예: fopen())

다른 앱의 데이터 액세스

사용자 개인정보 보호를 강화하기 위해 Android 11 이상을 실행하는 기기에서는 시스템이 다른 앱의 비공개 디렉터리에 대한 앱의 액세스를 추가로 제한합니다.

내부 저장소의 데이터 디렉터리 액세스

Android 9(API 수준 28)에서는 내부 저장소의 데이터 디렉터리에 있는 파일을 다른 앱이 어디서든 액세스 가능하게 만들 수 있는 앱을 제한하기 시작했습니다. Android 9 이상을 타겟팅하는 앱은 자체 데이터 디렉터리에 있는 파일을 어디서든 액세스 가능하게 만들 수 없습니다.

Android 11은 이 제한에 따라 확장됩니다. 앱이 Android 11을 타겟팅한다면 다른 앱이 Android 8.1(API 수준 27) 이하를 타겟팅하고 데이터 디렉터리의 파일을 어디서든 읽을 수 있도록 만들었더라도 다른 앱의 데이터 디렉터리에 있는 파일에 액세스할 수 없습니다.

외부 저장소의 앱별 디렉터리 액세스

Android 11에서 앱은 외부 저장소 내 다른 모든 앱의 전용 앱별 디렉터리의 파일에 더 이상 액세스할 수 없습니다.

문서 액세스 제한

개발자에게 테스트할 시간을 주기 위해 저장소 액세스 프레임워크(SAF)와 관련된 다음 변경사항은 앱이 Android 11 이상을 타겟팅할 때에만 적용됩니다.

디렉터리에 액세스

더 이상 ACTION_OPEN_DOCUMENT_TREE 인텐트 작업을 사용하여 다음 디렉터리에 관한 액세스 권한을 요청할 수 없습니다.

  • 내부 저장소 볼륨의 루트 디렉터리
  • 기기 제조업체가 신뢰할 수 있다고 생각하는 각 SD 카드 볼륨의 루트 디렉터리(카드가 에뮬레이션되었거나 삭제 가능한지 여부와 관계없음) 신뢰할 수 있는 볼륨은 앱이 대부분의 경우 성공적으로 액세스할 수 있는 볼륨입니다.
  • Download 디렉터리

파일에 액세스

더 이상 ACTION_OPEN_DOCUMENT_TREE 또는 ACTION_OPEN_DOCUMENT 인텐트 작업을 사용하여 다음 디렉터리에서 개별 파일을 선택하도록 사용자에게 요청할 수 없습니다.

  • Android/data/ 디렉터리 및 모든 하위 디렉터리
  • Android/obb/ 디렉터리 및 모든 하위 디렉터리

변경사항 테스트

이 동작 변경사항을 테스트하려면 다음 단계를 따르세요.

  1. ACTION_OPEN_DOCUMENT 작업을 사용하여 인텐트를 호출합니다. Android/data/Android/obb/ 디렉터리가 모두 나타나지 않는지 확인합니다.
  2. 다음 중 한 가지 방법을 사용합니다.
  3. ACTION_OPEN_DOCUMENT_TREE 작업을 사용하여 인텐트를 호출합니다. Download 디렉터리가 표시되고 디렉터리와 연결된 작업 버튼이 비활성화되는지 확인합니다.

권한

Android 11은 저장소 권한과 관련된 다음과 같은 변경사항을 도입합니다.

임의의 버전 타겟팅

첫 번째 대화상자에는 설정의 '허용'이라는 링크가 표시됩니다.
그림 1. 앱에서 범위 지정 저장소를 사용하고 READ_EXTERNAL_STORAGE 권한을 요청할 때 표시되는 대화상자

다음 변경사항은 앱의 타겟 SDK 버전에 관계없이 Android 11에서 적용됩니다.

  • 저장소 런타임 권한이 파일 및 미디어로 이름이 바뀝니다.
  • 범위 지정 저장소를 선택 해제하지 않은 앱이 READ_EXTERNAL_STORAGE 권한을 요청하는 경우 Android 10과 다른 대화상자가 사용자에게 표시됩니다. 이 대화상자는 그림 1과 같이 앱에서 사진과 미디어에 액세스할 수 있는 권한을 요청하고 있다는 것을 나타냅니다.

    사용자는 시스템 설정에서 READ_EXTERNAL_STORAGE 권한이 있는 앱을 확인할 수 있습니다. 설정 > 개인정보 보호 > 권한 관리자 > 파일 및 미디어 페이지에서 권한이 있는 각 앱이 모든 파일에 허용 아래에 나열됩니다. 앱이 Android 11을 타겟팅하면 '모든 파일'에 관한 이 액세스 권한은 읽기 전용입니다. 이 앱을 사용하여 공유 저장소의 모든 파일을 읽고 쓰려면 모든 파일 액세스 권한이 있어야 합니다.

Android 11 타겟팅

앱이 Android 11을 타겟팅하는 경우 WRITE_EXTERNAL_STORAGE 권한 및 WRITE_MEDIA_STORAGE 독점 권한은 더 이상 추가 액세스를 제공하지 않습니다.

Android 10(API 수준 29) 이상을 실행하는 기기에서 앱은 저장소 관련 권한을 요청하지 않고도 MediaStore.Downloads와 같은 잘 정의된 미디어 컬렉션에 기여할 수 있습니다. 앱에서 미디어 파일로 작업할 때 필요한 권한만 요청하는 방법을 자세히 알아보세요.

모든 파일 액세스

공유 저장소 액세스가 필요한 대다수 앱은 미디어 파일 공유미디어가 아닌 파일 공유 관련 권장사항을 준수할 수 있습니다. 그러나 일부 앱에는 기기의 파일에 광범위한 액세스가 필요하지만 개인정보를 안전하게 보호하는 저장소 권장사항을 사용하여 효율적으로 작업을 실행할 수 없는 핵심 사용 사례가 있습니다. Android는 이러한 상황을 위해 모든 파일 액세스라는 특수 앱 액세스를 제공합니다. 자세한 내용은 저장소 기기의 모든 파일 관리 방법에 관한 가이드를 참조하세요.