본문 바로가기

ⓞ2ⓦ TALK TALK!/○○⑨ 모바일TALK

[안드로이드] SD카드 쓰기 문제 관련 - 특히 최근 LG G2 4.4 업데이트와 관련해서...

최근에 4.4 올라간 G2에서 서드파티 어플이 SD카드에 파일 쓰기가 불가능하다는 문제가 발견되었는데요. 사실 이 문제는 허니콤, ICS때부터 시작된 굉장히 오래된 문제입니다. 대부분 100% 구글이 만든 순정 안드로이드가 아니라 제조사가 수정한 안드로이드를 쓰고 계셔서 몰랐을 뿐이지요.

 

일단 가장 중요한 개념부터 챙겨봅시다. 안드로이드에서 엄연히 말하자면 기기의 '내장' 플래시 메모리는 사실 '주 외장 저장장치 (primary external storage)'입니다. Internal Flash Memory 지만 시스템, 어플 데이터 파티션과 구분해서 external storage로 규정합니다. 그리고 흔히 언급되는 SD카드는 '2차 외장 저장장치 (secondary external storage)'고요.

 

구글은 놀랍게도 허니콤, ICS 때부터 이 '2차 외장 장치'인 SD카드에 쓰기 작업을 못하도록 막았습니다. 어떻게 막았을까요?

 

진저브레드까지는 WRITE_EXTERNAL_STORAGE 권한만 있으면 '주 외장 저장장치'나 '2차 외장 저장장치' 모두에 쓰기 작업이 가능했습니다. 하지만 허니콤, ICS 이후 부터는 권한을 나누었습니다. WRITE_EXTERNAL_STORAGE는 '주 외장 저장장치'에만 적용이 되고 '2차 외장 저장장치'나 OTG를 활용한 메모리 등에 쓰기 위해서는 WRITE_MEDIA_STORAGE가 필요하도록 했죠.

 

문제는 안드로이드 순정 상태에서 WRITE_MEDIA_STORAGE 권한은 시스템 또는 제조사 기본 탑재 어플만 획득이 가능하다는 것입니다. 즉, 사용자가 설치하는 서드 파티 어플은 WRITE_MEDIA_STORAGE 권한을 얻을수 없기 대문에 '2차 외장 저장장치'인 SD카드에 파일을 쓰는 것이 불가능하죠.

 

이렇게 한 구글의 정확한 의도는 아무도 모르나 몇가지 추정 또는 제기된 이유 정보에 따르면...

 

1. 구글은 정책적으로 외장 SD카드 이용을 권하지 않는다는 것입니다.

2. 구글은 넥서스S부터 어떤 레퍼런스 기기도 SD카드 지원을 하지 않습니다. SD카드 지원 기기는 처음에 나온 넥서스원이 유일하죠.

3. 구글은 사용자가 자사의 클라우드 서비스 즉, 유투브, 구글 뮤직, 지메일, 구글 드라이브 등을 적극적으로 활용하기를 바라고 있습니다.

 

이유야 어쩄든 2차 외장 저장장치인 SD카드 지원에 구글이 매우 소극적인건 사실입니다.

 

삼성은 갤럭시S2부터 그래서 편법으로 /system/etc/permission/platform.xml을 수정해 WRITE_EXTERNAL_STORAGE 권한을 부여시 uid에 media_rw도 추가되도록, 즉 WRITE_EXTERNAL_STORAGE 권한을 부여하면 WRITE_MEDIA_STORAGE 권한도 주도록 설정되어 있습니다. 어찌보면 권한 하나를 요구했는데 권한을 하나 더 공짜로 주는 조금 지저분한 FIX가 아닐까 싶긴 합니다. 최근 젤리빈 4.3 까지 모두 이 FIX가 적용되어 있습니다. (갤럭시 노트2 4.3 펌웨어 통해서 확인했습니다.)

 

커롬계의 유명한 Cyanogenmod도 역시 http://www.xda-developers.com/android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/ 처럼 처음 문제가 발생한 시점부터 고유한 수정 방식을 사용하고 있습니다. 최근에 CM11도 갤럭시S4 미니의 예를 보면 http://review.cyanogenmod.org/#/c/55316/ 와 같이 init 스크립트를 통해 서드파티 어플의 SD카드 쓰기를 활성화해주고 있죠.

 

LG도 킷캣 이전에 분명히 어떤 방식으로든 SD카드 쓰기 권한 부문을 순정 안드로이드에서 수정을 해서 적용했기에 서드 파티 어플이 SD카드에 파일을 쓰는데 문제가 없었을 겁니다. 킷캣에서는 그게 빠졌거나 기존 수정 방식이 킷캣에 먹히지 않아서 반영이 되지 않았거나 등 여러 이유가 있을듯 싶네요. 아니면 정말 구글이 권고하는 방향으로 서드 파티 어플의 SD카드 쓰기를 금지할 생각일수도 있다고 봅니다.

 

현재 갤럭시S4 GPE의 경우도 SD카드 쓰기 관련해서 구글의 안드로이드 권고사항을 충실히 따르고 있어 4.3, 4.4 모두 순정 상태에서는 서드 파티 어플의 SD카드 쓰기가 안됩니다.

일단 현재 상황은 이렇게 나중에 추가 정보나 수정할 부분이 있으면 수정하도록 하겠습니다.

 

 

*참고자료
http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/

http://forums.androidcentral.com/samsung-galaxy-s4-google-edition/340591-safe-install-android-4-4-kit-kat-my-ge-s4.html

 

p.s. 안드로이드 4.4 킷캣에서 변경된 사항으로 External Storage인 내장 플래시 메모리의 Android/data/패키지명 경로는 WRITE_EXTERNAL_STORAGE 권한 없이 서드파티 어플리케이션이 쓸 수 있도록 변경되었습니다만 이건 '2차 저장 장치'인 SD카드에 대한 서드파티 어플리케이션의 쓰기 권한 문제와는 다른 문제입니다. 여전히 2차 저장 장치인 SD카드 쓰기 권한 문제는 그대로 존재합니다. 사실 구글은 SD카드를 쓰지 않도록 권고 하고 있는 입장이기 때문에 별 관심이 없는게 사실이죠.