미니 안드 Q Scoped Storage 관련 정리
- Score_고동빈
- 조회 수 1497
- 2019.04.28. 21:25
원본은 링크한 안드로이드 개발자 문서입니다.
1. Scoped Stroage가 무엇이냐?
앱에게 샌드박싱된 저장소를 제공하는 개념입니다. 이게 적용되면 앱이 파일 쓰기 권한을 부여받지 않아도 외부 저장소에 자유로이 파일을 쓸 수 있습니다.
기존 안드로이드 시스템에선 외부 저장소의 파일을 읽거나 쓸때 READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE 권한을 사용자에게 부여받은 후에 자유롭게 수정했지만, 이제 이 권한들이 Q OS부터는 사라지고, 대신 Scoped Storage로 대체됩니다.
2. Scoped Storage가 적용되면 변경점은?
앱이 지맘대로 타 앱의 파일을 들여다 볼 수 없습니다. 또한 앱이 삭제되면 샌드박스 저장소 또한 같이 날라갑니다.
3. 내 앱이 삭제돼도 파일은 남기고 싶다면? 다른 앱의 파일을 보고 싶다면?
Shared Collection을 쓰면 됩니다. Shared Collection은 사진&영상, 음악, 다운로드 폴더에 한해 제공됩니다.
Shared Collection은 모든 앱이 공용으로 사용하는 저장소이지만, 아무 권한 없이 타 앱의 파일에 접근할 수는 없습니다. 만약 접근하고 싶으면,
- 사진과 영상의 경우 READ_MEDIA_IMAGES, READ_MEDIA_VIDEO 권한을
- 음악의 경우 READ_MEDIA_AUDIO 권한을
부여받아야 합니다. 다운로드 폴더는 아무 권한 없이 읽을 수 있지만, 대신 사용자가 앱이 사용할 파일을 직접 선택하도록 해야 합니다(이미지 첨부 Picker를 생각하시면 됩니다).
4. Shared Collection에 다른 앱이 저장한 파일에 수정을 가하고 싶다면?
해당 파일 타입에 대한 기본 관리자 앱 권한을 부여받아야 합니다. 가령, 다른 앱이 저장한 음악 파일들을 수정하고 싶다면 내 앱이 사용자가 지정한 기본 음악 관리자 앱이어야 합니다.
5. 특정 파일에 접근하려면?
사용자가 앱이 사용할 파일을 직접 선택하도록 해야 합니다(이미지 첨부 Picker를 생각하시면 됩니다).
6. Scoped Storage 정책에 영향을 받는 기기는?
- API Target이 Q OS 이상이며
- 시스템이 P OS에서 업데이트 되지 않아야 합니다(출고당시부터 Q인 기기).
7. iOS랑 다른 점은?
반은 비슷한데 반은 틀립니다.
앱이 기본적으로 타 앱의 저장소에 접근할 수 없다는 것은 iOS의 App Sandboxing과 비슷하나, 특정 파일 종류에 한해 여러 앱들이 공용으로 쓸 수 있으며 (권한을 받아야 하지만) 타 앱이 저장한 파일을 읽을 수도 있습니다. 즉, 대부분의 사용자들이 외장 저장소를 사용하는 주 이유인 음악/사진/동영상에 한해서는 별 영향이 없을 것입니다.
3. 내 앱이 삭제돼도 파일은 남기고 싶다면? 다른 앱의 파일을 보고 싶다면?
Shared Collection을 쓰면 됩니다. Shared Collection은 사진&영상, 음악, 다운로드 폴더에 한해 제공됩니다.
Shared Collection은 모든 앱이 공용으로 사용하는 저장소이지만, 아무 권한 없이 타 앱의 파일에 접근할 수는 없습니다.
4. Shared Collection에 다른 앱이 저장한 파일에 수정을 가하고 싶다면?
해당 파일 타입에 대한 기본 관리자 앱 권한을 부여받아야 합니다. 가령, 다른 앱이 저장한 음악 파일들을 수정하고 싶다면 내 앱이 사용자가 지정한 기본 음악 관리자 앱이어야 합니다.
이 두개가 큰거 같네요. 기존 퍼블릭 스토리지가 사라지고 Shared Collection만 사용 가능한데다가 수정도 함부로 못한다는거..
Access specific files
In some use cases, your app might need to open or create files that it doesn't have permission to access:
- In a photo-editing app, open a drawing.
- In a business productivity app, save a text document to a location that the user chooses.
For these situations, use the Storage Access Framework, which allows the user to select a specific file to open, or choose a specific location to save a file.
번역을 안 해 놨네요. Storage Access Framework를 이용하면 File Picker를 이용하여 파일에 접근할 수 있다고 되어 있습니다.
추가: 해 놨었네요. 5번을 참고하시면 되겠습니다.
위에 제 댓글에도 답글을 달아주셨는데, 이 댓글로 갈음합니다.
보안과 편의성은 반비례할 수 밖에 없습니다. 기존처럼 권한 액션 한번으로 앱이 사용자의 모든 파일을 수정할 수 있게 둔다는 것은 어찌 보면 그냥 편한 기능일 지 모르나, 또한 시스템을 악용할 소지를 엄청나게 크게 남겨두는 것이 됩니다.
그런 측면에서 보면 Scoped Storage가 지향하는 바는 제 개인적으로는 옳다고 생각합니다. 어디처럼 빡빡하게 여지를 남기지 않고 모두 틀어막는 것이 아니라, 대부분의 유저들이 외장 저장소를 사용하는 이유인 미디어 파일에 한해서는 기존과 최대한 비슷하면서도 보안을 유지할 수 있도록 공용 저장소를 설계해 놨으니까요.
물론 이 생각은 제 개인의 의견이기에 다른 분들이 이러한 정책 변화에 대해 분노하는 것도 이해는 갑니다. 그렇지만 어디까지나 제 생각이 그렇다는 것입니다.
폴드 1세대로 존버각