안드로이드 10 이상부터 저장소 관리 정책에 큰 변화가 생겼습니다.
Scope Storage 라고 하는 개념인데, 기존에 파일 경로나 SD카드 등에 접근할 수 있었던 기능들에 큰 제약이 발생하고,
샌드박스 형식의 앱 관련 디렉토리에만 접근 가능하게 되는 변경사항 입니다.
즉, 안드로이드 10(API 29)을 타겟으로 하는 앱의 경우 또다시!!!! SD카드 경로나 파일 읽기/쓰기 관련해서 변경해주어야 한다는 겁니다.
특히, Environment.getExternalStorageDirectory()가 deprecated 됨에 따라 최상위 경로등을 가지고 올 수 없도록 변경되어 파일 경로 등을 사용할 수 없도록 변경될 예정(?)이었습니다.
즉, 컨텐트 프로바이더를 사용하는것 처럼 일일이 유저가 상호작용 해주어야 파일에 접근 가능하도록 변경될 예정이었습니다.
굉장히 불편한데, 자세한 사항은 개발자 문서의 안드로이드 10 - Privacy changes 를 참고 해 주세요.
어쨌건, API 29를 타겟으로 하는 경우 발생하게 되고 해결방법은 아래와 같습니다.
아래와 같이 manifest파일의 application란에
android:requestLegacyExternalStorage="true"
를 추가하는것으로 임시 대응 가능합니다.
그렇다면 안드로이드 10에서는 어떻게 해야 하는가 하면
android 11 부터 일부 저장소 관련 정책이 다시 롤백되는등 아직은 명확하지 않습니다.
관련 기사인 Modern User Storage on Android와
개발자 문서의 안드로이드 11 프리뷰 - Android 11의 저장소 업데이트
를 참고해주세요.
댓글