본문 바로가기
Android/Exceptions

open failed: EACCES (Permission denied) ::: 안드로이드 10 이상에서 외부저장소 파일 복사시 뜨는 Exception

by featherwing 2020. 7. 24.
반응형

안드로이드 10 이상부터 저장소 관리 정책에 큰 변화가 생겼습니다.

 

 

Scope Storage 라고 하는 개념인데, 기존에 파일 경로나 SD카드 등에 접근할 수 있었던 기능들에 큰 제약이 발생하고,

샌드박스 형식의 앱 관련 디렉토리에만 접근 가능하게 되는 변경사항 입니다.

 

즉, 안드로이드 10(API 29)을 타겟으로 하는 앱의 경우 또다시!!!! SD카드 경로나 파일 읽기/쓰기 관련해서 변경해주어야 한다는 겁니다.

 

특히, Environment.getExternalStorageDirectory() deprecated 됨에 따라 최상위 경로등을 가지고 올 수 없도록 변경되어 파일 경로 등을 사용할 수 없도록 변경될 예정(?)이었습니다.

 

즉, 컨텐트 프로바이더를 사용하는것 처럼 일일이 유저가 상호작용 해주어야 파일에 접근 가능하도록 변경될 예정이었습니다.

 

굉장히 불편한데, 자세한 사항은 개발자 문서의 안드로이드 10 - Privacy changes 를 참고 해 주세요.

 

Android 10의 개인정보 보호 변경사항  |  Android 개발자  |  Android Developers

Android 10의 개인정보 보호 변경사항 Android 10(API 레벨 29)에는 사용자의 개인정보 보호 강화를 위해 많은 기능과 동작 변경사항이 도입되었습니다. 따라서 사용자가 앱에 제공하는 데이터와 기능

developer.android.com

 

어쨌건, API 29를 타겟으로 하는 경우 발생하게 되고 해결방법은 아래와 같습니다. 

 

아래와 같이 manifest파일의 application란에

android:requestLegacyExternalStorage="true"

를 추가하는것으로 임시 대응 가능합니다.

 

 

그렇다면 안드로이드 10에서는 어떻게 해야 하는가 하면

 

 

 

android 11 부터 일부 저장소 관련 정책이 다시 롤백되는등 아직은 명확하지 않습니다.

 

관련 기사인 Modern User Storage on Android

 

Modern user storage on Android

To protect user data and reduce the amount of space consumed by apps, Android 10 introduced changes to the behavior of the external…

medium.com

개발자 문서의 안드로이드 11 프리뷰 - Android 11의 저장소 업데이트

 

Android 11의 저장소 업데이트  |  Android 개발자  |  Android Developers

Android 11의 저장소 업데이트 Android 11(API 수준 30)에서는 플랫폼을 한층 더 강화하여 외부 저장소의 앱 및 사용자 데이터를 더욱 안전하게 보호합니다. 이 버전에는 미디어의 원시 파일 경로 액세

developer.android.com

를 참고해주세요.

 

 

 

 

 

 

 

 

반응형

댓글