Android11(R)의 Preview에서 Storage(저장소) 변경사항을 정리하였습니다.
이번 업데이트는 Android10의 Scoped Storage를 보완한 것들이 대부분입니다.
추가된 내용들을 간략히 정리해보았습니다.
Data migration
Android10에서 소개한 것처럼, Android11을 타겟팅하는 앱은 모두 Scoped Storage
가 적용됩니다.
다만, Android10 이하의 버전에서 Android11으로 업데이트되는 앱은, data migration이 필요한 경우 Legacy 저장방식을 사용할 수 있습니다.
하지만, 디바이스에 처음 설치되는 앱은 적용이 안되기 때문에 Scoped storage 적용이 불가피합니다.
Android11을 타겟팅하는 앱으로 업데이트되는 경우에 한해서, Legacy 저장방식을 사용하려면 App의 manifest에
preserveLegacyExternalStorage=true
로 설정해야 합니다.
저장공간 확인 및 cache 삭제
Android11에서는 FileManager 같은 앱들이 다른 앱들의 cache를 삭제할 수 없습니다. 대신 사용자에게 동의를 얻고 cache를 삭제할 수 있습니다.
ACTION_MANAGE_STORAGE
인텐트를 실행하여 저장소의 여유공간을 확인할 수 있습니다.- 저장공간이 부족한 경우,
ACTION_CLEAR_APP_CACHE
인텐트를 실행하여 사용자의 동의를 얻고 cache를 삭제할 수 있습니다.
추가된 MediaStore API
MediaStore의 API가 추가되었습니다.
다음 API들을 사용하여 사용자에게 특정 권한 및 기능을 요청할 수 있습니다.
- createWriteRequest() : 쓰기 권한 요청
- createFavoriteRequest() : 미디어 파일을 Favorite으로 표시하도록 요청
- createTrashRequest(): 휴지통에 미디어 파일을 버리도록 요청
- createDeleteRequest(): 미디어 파일을 삭제하도록 요청
(이 부분은 코드로 테스트하고 다시 업데이트하겠습니다.)
Raw file에 직접 접근
READ_EXTERNAL_STORAGE
권한이 있으면, 디바이스의 미디어 파일에 직접 접근이 가능합니다. 대신 MediaStore API보다 성능이 떨어지기 때문에 가능하면 MediaStore API를 사용하라고 합니다.
(이 부분은 코드로 테스트하고 다시 업데이트하겠습니다.)
파일 접근 권한 요청에 대한 변경 사항
Android11을 타겟팅하는 앱은 ACTION_OPEN_DOCUMENT_TREE
인텐트로 다음 디렉토리에 대한 권한을 요청할 수 없습니다.
- Downloads의 root directory
- SD card와 같은 저장소의 root directory
Android11을 타겟팅하는 앱은 ACTION_OPEN_DOCUMENT_TREE
또는 ACTION_OPEN_DOCUMENT
인텐트로 다음 디렉토리와 그 하위 경로에 대한 접근 권한을 요청할 수 없습니다.
Android/data/
와 하위 경로 파일Android/obb/
와 하위 경로 파일
퍼미션 이름 변경
Storage
퍼미션의 이름은 Files & Media
로 변경됩니다. 또한 퍼미션을 요청하는 팝업의 내용이 달라집니다.
의미 없는 퍼미션
Android11을 타겟팅하는 앱의 경우, WRITE_EXTERNAL_STORAGE
또는 WRITE_MEDIA_STORAGE
는 의미가 없습니다.
퍼미션을 획득해도 권한 측면에서 어떤 이점도 없습니다.
All Files Access 권한
FileManager나 Backup&Restore 기능을 갖고 있는 앱들은 모든 파일에 대한 접근이 필요합니다.
이런 앱들은 다음과 같이 사용자에게 All Files Access
라는 권한을 요청할 수 있습니다.
- manifest에
MANAGE_EXTERNAL_STORAGE
권한을 선언합니다. ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
를 실행하여 사용자가 앱에 권한을 부여할 수 있는 페이지를 띄울 수 있습니다.
All Files Access
권한을 받으면 다음 파일들을 접근할 수 있습니다.
- Shared storage의 파일 읽기/쓰기 권한
- MediaStore.Files 테이블의 파일들 접근
(이 부분은 코드로 확인하고 다시 업데이트하겠습니다.)
참고
Related Posts
- Android 14 - 사진/동영상 파일, 일부 접근 권한 소개
- Android - adb push, pull로 파일 복사, 다운로드
- Android 14 - 암시적 인텐트 변경사항 및 문제 해결
- Jetpack Compose - Row와 Column
- Android 13, AOSP 오픈소스 다운로드 및 빌드
- Android 13 - 세분화된 미디어 파일 권한
- Android 13에서 Notification 권한 요청, 알림 띄우기
- Android 13에서 'Access blocked: ComponentInfo' 에러 해결
- 에러 해결: android gradle plugin requires java 11 to run. you are currently using java 1.8.
- 안드로이드 - 코루틴과 Retrofit으로 비동기 통신 예제
- 안드로이드 - 코루틴으로 URL 이미지 불러오기
- Android - 진동, Vibrator, VibrationEffect 예제
- Some problems were found with the configuration of task 에러 수정
- Query method parameters should either be a type that can be converted into a database column or a List
- 우분투에서 Android 12 오픈소스 다운로드 및 빌드
- Android - ViewModel을 생성하는 방법
- Android - Transformations.map(), switchMap() 차이점
- Android - Transformations.distinctUntilChanged() 소개
- Android - TabLayout 구현 방법 (+ ViewPager2)
- Android - 휴대폰 전화번호 가져오는 방법
- Android 12 - Splash Screens 알아보기
- Android 12 - Incremental Install (Play as you Download) 소개
- Android - adb 명령어로 bugreport 로그 파일 추출
- Android - adb 명령어로 App 데이터 삭제
- Android - adb 명령어로 앱 비활성화, 활성화
- Android - adb 명령어로 특정 패키지의 PID 찾기
- Android - adb 명령어로 퍼미션 Grant 또는 Revoke
- Android - adb 명령어로 apk 설치, 삭제
- Android - adb 명령어로 특정 패키지의 프로세스 종료
- Android - adb 명령어로 screen capture 저장
- Android - adb 명령어로 System 앱 삭제, 설치
- Android - adb 명령어로 settings value 확인, 변경
- Android 12 - IntentFilter의 exported 명시적 선언
- Android - adb 명령어로 공장초기화(Factory reset)
- Android - adb logcat 명령어로 로그 출력