[Android AOSP] Android Browser – WRITE_EXTERNAL_STORAGE Permission

안드로이드에서는 다양한 Broswer 를 지원한다.

그리고, AOSP Build 시에 기본적으로 포함되어 설치가 되는 브라우저를 지정할 수도 있다.

 

안드로이드 에서는 원래 “Android Browser” 라는 기본 브라우저를 포함시켰다.

하지만 Chrome의 개발로 안드로이드의 공식적인 입장은 “Android Browser” deprecated 정책이고, Chrome 사용을 장려한다. (Reference)

심지어 Google의 “Android Browser” 개발 지원은 2015년 5월 18일 이후로 중단되었다. (Sources)

또한 Android 6.0 marshmallow 이후부터는 기본 브라우저도 Chrome으로 변경되었다. 그 이유로는 marshmallow부터 강화된 application permission 때문인 것 같다.

Android 6.0(API 레벨 23)부터 사용자는 앱이 설치될 때가 아니라 앱이 실행되는 중에 앱에 권한을 부여합니다. 이 접근방식에서는 사용자가 앱을 설치하거나 업데이트할 때 권한을 부여할 필요가 없으므로 앱 설치 과정이 간소화됩니다. 또한 사용자가 앱의 기능을 더 세부적으로 제어할 수 있습니다. 예를 들어, 기기 위치가 아니라 카메라에 대한 액세스 권한을 카메라 앱에 부여하도록 선택할 수 있습니다. 사용자는 앱 설정 화면으로 이동하여 언제든지 권한을 취소할 수 있습니다. (Reference)

Android 6.0에 기본 “Android Browser”를 올리게 되면, 브라우저에서 이미지 및 파일을 다운받을 때 WRITE_EXTERNAL_STORAGE Permission 에러가 발생하며 브라우저가 종료되는 버그가 나타난다.

그 내용을 logcat으로 살펴보면 다음과 같다.

E DatabaseUtils: java.lang.SecurityException: No permission to write to /storage/emulated/0/Download/downloadfile.jpg: Neither user 10027 nor current process has android.permission.WRITE_EXTERNAL_STORAGE.

이것은 Settings – Apps – Browser – Permission 에서 외부 파일 접근 권한을 실행시켜도 되지만, 기본적으로 “Android Browser” 에서 예외처리를 해주고 있지 않기 때문이다.

이 문제를 해결하기 위해서는 기본 브라우저 프로그램을 Chrome으로 변경하는 것을 추천한다.