[Kotlin, Java] Android 10에서 파일 엑세스가 되지 않는 문제 해결

- EPERM 오류 해결하기 -


얼마전 개발 테스트 진행중 Android 8이나, Android 9에서 잘만 읽기/쓰기가 되던 파일이 Android 10에서 구동을 하니 에러만 열심히 뿜어내고 저장이 안되는 문제가 있었습니다.

로그창을 확인해보니 EPERM 오류를 뿜어내고 있었고, 저장이 되지않아 곤란해 하고 있었습니다.

특히 테스트를 하며 확인되었지만, READ_EXTERNAL_STORAGE 및 WRITE_EXTERNAL_STORAGE 권한을 유저에게 승인받고 있어서 유독 Android 10에서만 생기는 문제로 파악이 되었죠.

오늘은 이런 Android10으로 올라가면서 파일에 대한 읽기 쓰기가 되지않는 문제에 대해 다뤄보겠습니다.

 - 원인과 해결

Android 10 부터는 외부 저장소 액세스에 대해서 제한을 걸어두는 모양입니다.

해당 제한을 풀기 위해서는 AndroidManifest.xml에 requestLegacyExternalStorage의 값을 true로 설정해주어야합니다. (Android 10 이상을 타겟팅으로 하는 앱의 경우)

<manifest ... >

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  
  <!-- This attribute is "false" by default on apps targeting
  Android 10 or higher. -->
  <application 
  	android:requestLegacyExternalStorage="true" ... >
    
  ...
  
  </application>
</manifest>

 

* Android 10 이상에서는 외부저장소에 접근을 하기위해 requestLegacyExternalStorage 속성을 꼭 넣어주시기 바랍니다.

** 다만 해당 방법이 완벽히 해결을 할 수 있는 방법은 아니며, 추후 업데이트 되는 Android 버전에서는 동작하지 않을수 있으니 주의해주시기 바랍니다.

 

 - 참조

https://developer.android.com/training/data-storage/files/external-scoped?hl=ko#opt-out-of-scoped-storage

 

범위가 지정된 외부 저장소 액세스 관리하기  |  Android 개발자  |  Android Developers

사용자에게 파일의 더 많은 권한을 제공하고 파일이 복잡해지는 것을 제한하기 위해, Android 10(API 레벨 29) 이상을 타겟팅하는 앱은 외부 저장소로 범위가 지정된 액세스 또는 범위 지정 저장소��

developer.android.com

버전정보 (v1.0)

 - v1.0 2020.06.12 배포

 

* 저작권에 위반될 수 있는 컨텐츠(이미지, 동영상 등)나 게시글은 삭제되거나 수정될 수 있습니다.

* 문제의 여지가 될 수 있는 컨텐츠의 경우 댓글 달아 주시면 빠른 시일 내에 조치하도록 하겠습니다.

 

Karzin

abbeea@naver.com

+ Recent posts