-
scope storage 간단하게 정리Android 2021. 7. 8. 20:16
App target SDK 28 이하를 적용하던 개발자들은 'write_external_stroage' 권한을 얻으면 저장소에 관련된 접근을 할 수 있었지만 이제는 떠나보내야 한당......
또한 target SDK 29 적용 시 Scope Storage를 무시할 수 있었던 requestLegacyExternalStorage도 target SDK 30을 적용하면 이제 예외처리가 되었으니.. Scope Stroage를 추가해야 한다...
기존 안드로이드에서는 내부 저장소, 외부 저장소로 나뉘어서 관리하고 있다.
Android 10을 기준으로 저장소의 모양이 변경되는데 다음과 같다.
Android 10 전 저장소 형태 Legacy Storage Android 10 후 저장소 형태 Scoped Storage 내부 저장소 ( /data/... 경로)
모든 스마트폰에서 제공되며 앱을 설치하게 되면 해당 앱을 위한 저장공간이 할당이 된다.
이 공간은 샌드박스 형식으로 되어 있어 해당 앱만 접근이 가능하며 외부에서는 볼 수 없는 형태이다. 또한 해당 앱이 삭제되면 내부 저장소 또한 삭제된다.
외부 저장소 (/storage/... 경로)
스마트폰의 SD card와 같이 이동식 저장장치로 제공되기도 하며, 내부, 외부 파티션을 나누어 저장소를 제공하는 경우도 있다. 스마트폰 구매 시 128gb 256gb 등등의 공간이 외부 저장소라고 말하면 쉽게 이해할 수 있겠다.
외부 저장소의 용도
- 더 큰 메모리와 디스크 공간을 사용하기 위함
- A라는 App에서 B라는 App의 데이터를 Access 시키기 위해서
- 내부 저장소가 사라져도 데이터를 스마트폰 기기에 저장하기 위해서
Android 10 이전의 외부 저장소 정책은 다음과 같았다.
앱 데이터 폴더 /storage/android/data/앱의package/ 공용 폴더 /storage/폴더이름 앱 데이터 폴더
앱에서만 접근할 수 있었고 앱이 삭제될 때 데이터도 함께 삭제된다.
공용 폴더
모든 앱이 접근할 수 있었으며 다른 목적으로 사용할 폴더를 직접 생성할 수 도 있었다. 또한 앱이 삭제돼도 해당 폴더에 있는 데이터들은 남아 있다.
Android 10 이후의 외부 저장소 정책은 다음과 같다.
앱 데이터 폴더 - 앱 데이터 폴더는 이전과 동일
- 구조가 샌드박스로 변경되면서 EXTERNAL_STORAGE 권한으로 자신의 앱이 아닌 다른 앱 공간을 마음대로 읽고 쓸 수 없다접근 방식 getExternalFilesDir() , getExtrnalCacheDir() 삭제 유무 앱 삭제 시 데이터 삭제 미디어 파일 - 공용 폴더 안에 있는 미디어 파일들을 MediaStore를 통해 읽을 수 있다.
- READ_MEDIA_IMAGES 사진 파일 권한 , READ_MEDIA_VIDEO 동영상 파일 권한, READ_MEDIA_AUDIO 음악 파일 권한
- 위 3가지 권한 중 필요한 항목만 요청하여 사용하도록 구글에서 권장하고 있다.
접근 방식 MediaStore API를 사용하여 접근 삭제 유무 앱이 삭제되어도 남아 있음 샘플 https://github.com/android/storage-samples/tree/master/MediaStore ,
https://developer.android.com/training/data-storage/shared/media?hl=ko공용 파일 - 미디어 파일들을 제외 한 모든파일에 접근할 때 저장소 액세스 프레임워크(Storage Access Framework)를 사용한다.
- 따로 권한 필요하지 않음접근 방식 Storage Access Framework 삭제 유무 앱이 삭제되어도 남아 있음 샘플 https://developer.android.com/guide/topics/providers/document-provider?hl=ko ,
https://github.com/android/storage-samples/tree/master/StorageProvider'Android' 카테고리의 다른 글
Android Standby Bucket (0) 2022.07.01 Android - Safety Net API (에뮬레이터 감지 및 루팅 감지) (0) 2022.02.11 Component - Service (0) 2021.10.24 Component - Activity (0) 2021.10.01 정규식 (0) 2020.01.15