보통 second Sdcard는 탈착식 sdcard로 외장메모리란 용어로 사용했는데 기존에는 이곳에 많은 앱들이 별반 제약 없이 사용했으나 킷캣부터는 이 것을 허용하지 않으며 자신의 package-specific한 공간에만 퍼미션 없이 자유롭게 사용이 가능하다고 합니다.(외장/android/data/packagename/) 이 공간에 파일을 쓰실땐 해당 패스에 접근하기 위해 4.4부터 새로 제공하는 getExternalFilesDirs() 메서드를 통해서 접근하면 됩니다. 해당 메서드를 통해 전달받는 File[] 형태의 값중 0번째가 첫번째 내장메모리, 1번째가 두번째 외장 메모리 패스를 얻을 수 있습니다.

getExternalFilesDirs() 는 4.4 부터 지원하므로 하위버전에서 해당 메서드를 사용하시기 위해서는 ContextCompat.getExternalFilesDirs()를 사용하시기 바랍니다.

사실 이 현상은 허니콤때부터 나타난 현상으로 제조사에서 해당 부분을 이슈가 없도록 수정하였으며 구글 디바이스의 경우 second Sdcard를 지원하는 것이 없었기에 해당 부분을 인지하지 못하고 있었던 것입니다.

그럼 왜 구글은 second Sdcard에 대한 정책을 변경하였을까요? 추측하건데 구글 크롬북처럼 최대한 구글 클라우드를 이용하도록 유도하기 위해 이러한 정책을 쓴건 아닌가합니다.

구글판 갤럭시S4에서도 동일현상이 발생되고 있습니다.

그렇다면 갑자기 G2가 4.4로 업데이트 되면서 해당 이슈가 붉어졌을까요? 제조사에서 이전처럼 해당부분을 변경하면 될텐데요. 그건 아래 관련 스레드에서 설명되어 있듯이 4.4 킷캣부터 구글이 CTS 검증 절차에 이 검사 항목을 추가한것으로 추측됩니다. (구글 CTS 에서 Fail 이 되면 제조사는 해당 디바이스를 출시를 할 수 없습니다) 따라서 어쩔 수 없이 Read 만 가능하도록 그냥 놔두는 것이겠죠.

조금 더 설명해 보자면 안드로이드 시스템 내부를 검색해 보면 system/etc/permissions 폴더에 아래 이미지와 같은 내용의 platform.xml란 파일을 찾을수 있습니다.

이 이미지 항목 중 name= “android.permission.WRITE_EXTERNAL_STORAGE” 의 내용이 바로 이 문제의 원인인 부분입니다. 왼편이 순정, 오른편이 제조사들이 이제까지 수정한 방법입니다. 만약 루팅을 하신 분이 있다면 해당 파일을 위 이미지와 같이 수정하실 경우 이전처럼 문제없이 second Sdcard를 사용하실 수 있으실 겁니다.

ES File Explorer의 경우 second Sdcard 관련 작업이 동작한다는 것을보면 개발적으로 이전처럼 사용할 수 있다는 방법이 있는 것 같기는 합니다만 좀 더 확인해 봐야 할 것 같습니다.

따라서 킷캣 버전 이상부터 App에서 외장메모리 공간 사용 방법과 사용자 안내하는 서비스 시나리오 변경이 필요 할 듯 합니다.

관련 스레드 :

엘지에 g2 킷캣 외장메모리 사용 문의

g2 이외에 4.4 올라간 기기들은 외장메모리 이상 없나요

위 내용을 읽어보셔서 알겠지만 개발자분들께서는 G2 킷캣 업데이트가 본격적으로 진행되기전에 외장메모리 이슈는 확실히 테스트하셔야 할 것 같습니다. 한가지 더 명심하셔야 할 것은 아래 사이트에 나와있듯이

The WRITE_EXTERNAL_STORAGE permission must only grant write access to the primary external storage on a device. Apps must not be allowed to write to secondary external storage devices, except in their package-specific directories as allowed by synthesized permissions. Restricting writes in this way ensures the system can clean up files when applications are uninstalled.
출처 : http://source.android.com/devices/tech/storage/

기존에 이야기 했던 외장메모리 권한 이슈와는 다른 이슈라는 점입니다. 즉, WRITE_EXTERNAL_STORAGE권한을 추가해서 해결될 것이 아니라는 것이죠.

* 참고로 저는 아직 실단말 테스트는 못해보았습니다.