5월 5일부터는 앱에 광범위한 저장공간 액세스 권한이 필요한 이유를 알려야 합니다(?)
이번 포스팅에서는 targetSDK 버전을 30으로 올려보겠습니다.
최근 앱 배포 이후 다음과 같이 무서운 경고메시지를 보았습니다.
5월 5일부터는 앱에 광범위한 저장공간 액세스 권한이 필요한 이유를 알려야 합니다.
앱의 App Bundle 또는 APK 중 1개 이상에서 매니페스트 파일에 requestLegacyExternalStorage 플래그가 포함되어 있다는 것이 확인되었습니다.
Android 11 이상을 실행하는 기기에 설치되는 앱의 개발자는 사용자가 기기 저장공간 액세스를 더 세밀하게 제어할 수 있도록 범위 지정 저장소를 사용해야 합니다. 5월 5일 후에 Android 11 이상을 대상으로 앱을 출시하려면 다음 중 하나를 해야 합니다.
- 저장소 액세스 프레임워크 또는 Media Store API와 같이 개인정보를 더 안전하게 보호하는 권장사항을 따르도록 앱을 업데이트합니다.
- 매니페스트 파일에서 모든 파일 액세스(MANAGE_EXTERNAL_STORAGE) 권한을 선언하도록 앱을 업데이트하고 5월 5일부터 Play Console에서 모든 파일 액세스 권한 선언을 완료합니다.
- 앱에서 모든 파일 액세스 권한을 완전히 삭제합니다.
Android 11을 타겟팅하는 앱의 경우 requestLegacyExternalStorage 플래그가 무시됩니다. 광범위한 액세스를 유지하려면 모든 파일 액세스 권한을 사용해야 합니다.
허용된 용도 외에 모든 파일 액세스 권한에 액세스를 요청하는 앱은 Google Play에서 삭제되고, 업데이트를 게시할 수 없게 됩니다.
기존 운영중인 앱의 targetSDK 버전은 29(안드로이드10)이었고, requestLegacyExternalStorage 플래그 값이 true였습니다.
안드로이드11(targetSDK : 30)일 때에만 해당된다니 다행입니다. 하지만 연말이 되면 구글은 분명히 targetSDK를 30으로 올리라는 협박을 하겠죠.
구글의 권장사항에 따라 모든 소스를 뒤엎기엔 공수가 너무 큽니다. 저는 다음과 같이 해결하기로 했습니다.
1. requestLegacyExternalStorage 플래그 값은 그대로 'true'
2. targetSDK 버전은 당연히 30으로 올려야함
3. MANAGE_EXTERNAL_STORAGE 권한을 선언해보자
1~2번까지만 했을때 앱 빌드는 잘되었으나, 앱 내 사진불러오기를 했을때 계속 크래시가 발생했습니다. 권한이 뭔가 잘못됐다는걸 느꼈습니다.
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
그래서 AndroidManifest에서 위처럼 권한을 추가해주었습니다. MANAGE_EXTERNAL_STORAGE가 뭔지 몰랐으나, 값 위에서 F3으로 추적하니 API 30에서 새로생긴 권한이라는 것을 알 수 있었습니다.
실제로 앱 권한설정을 들어가보니 '모든 파일 관리 허용' 이라는 항목이 생겼네요!!
혹시 몰라 네이버 카카오앱의 권한은 어떻게 되어있나 봤더니...
크~ 여윽시 갓기업들은 이미 API 30 대응을 한 것 같습니다. 저도 '미디어 액세스만 허용' 하는 권한체크를 빼고 '모든 파일 관리 허용' 을 추가했습니다. 사진 불러오기 기능이 잘 작동합니다. 봐주셔서 감사합니다.