필자는 2개의 안드로이드 기기를 소유하고 있다. GT-N5110 (Galaxy Note 8.0)과 GT-N8013 (Galaxy Note 10.1)이 그것이다. 작년부터 이 기기들에 대한 안드로이드 OS 업데이트 소식이 계속 들려왔는데 삼성이 드디어 N5110에 대한 Kitkat 업데이트를 내놓았다는 소식이 있어서 확인을 해 보았다. 업데이트가 나왔다.

필자는 Logos Bible Software를 사용을 하고 있는데 이놈이 데이타만 12기가를 먹는다. 사용하고 있는 N5110 모델은 내부 메모리가 16기가인데 시스템 빼면 9기가쯤 남는다. Logos의 데이타만 12기가가 넘는데 내부 메모리 용량이 턱없이 부족하다. 어쩔 수 없이 32기가 SD카드를 사서 사용을 하고 있다. 헌데 안드로이드는 App을 외부 메모리에 설치하는 것을 막고 있기 때문에 어쩔 수 없이 루팅을 해서 SD 카드 메모리를 내부 메모리의 하위 디렉토리로 마운트해서 사용을 하고 있다. 루팅이 아니면 방법이 없다.

Kitkat이 나왔다고 해서 일단 이 부분을 먼저 살펴보았다. 루팅을 하지 않고도 Logos의 데이타를 SD 카드로 보낼 수 있는 방법이 있는지 말이다. 일단 시스템상으로 가능하기는 한 것 같은데.. Logos에서 지원을 해 주지 않는 것 같다..

 

자세한 내막이 궁금해서 구글링을 좀 해보았다. 구글 포럼에 관련 글이 올라와 있다. Jeff Sharkey라는 사람이 이 문제에 대한 구글측의 입장을 올려놓았는데.. 내용을 읽어보니 약간 어이가 없다. 구글측의 입장을 요약하면 아래와 같다.

https://groups.google.com/forum/#!msg/android-platform/14VUiIgwUjY/UsxMYwu02z0J

사람들은 구글이 SD 카드에 대한 쓰기 권한을 허용했다가 갑자게 제한한 것으로 이해를 하는데 이는 사실과는 다르다. 구글은 처음부터 SD 카드 자체를 따로 지원한적이 없다. 각 스마트폰 회사가 임의로 SD 카드 슬롯을 추가 하면서 나름대로의 구멍(?)을 뚫어놓은 것이었다. 그런데 이번에 Kitkat으로 업데이트 되면서 처음으로 구글이 공식적으로 SD 카드를 지원 한 것이다.
SD 카드 지원을 결정하면서 구글이 관심을 가졌던 것은 일부 app들이 SD 카드에 임의의 폴더를 만들어서 사방으로 데이타들을 뿌려놓고 정작 앱을 삭제할 때는 그렇게 임의로 만들어진 데이타를 남겨둔 채 삭제하지 않는 문제였단다. 따라서 SD 카드 지원정책을 도입하면서 app 관련 폴더를 제외한 다른 폴더는 쓰는 권한을 제한했다고 한다. 이는 SD 카드에서 각 app들의 폴더에는 읽고 쓰는 권한을 주었다는 것을 의미한다. 폴더 구조는 아래의 예와 같단다.

/storage/emulated/0/Android/data/com.logos.androidlogos/
/storage/extSdCard/Android/data/com.logos.androidlogos/

아마도 logos에서 위와 같은 식으로 폴더를 설정해서 데이타 관리를 해 준다면 루팅을 하지 않고도 SD 카드로 데이타를 넘길 수 있을 것 같은데 현재로서는 잘 모르겠다.

 

문제는 폴더를 공유해야 하는 다수의 앱들이다. 가령 음악 관리 프로그램이나 Office 프로그램, Graphic 프로그램의 경우에는 편집을 필요로 하는 데이터들이 관련 프로그램의 폴더에만 존재하는 것이 아닌 도처에 있게 되는데, 이러한 데이타 파일들을 열 수는 있지만 편집한 후 저장을 할 수는 없는 한계가 생기게 된다. 이 부분에 대해서 많은 app 개발자들이 계속 구글에 어필을 하고 있지만 구글은 요지부동이다.

 

이 논란을 들여다보면서 깜짝 놀란 부분이 있는데 Android는 원래 자유의 상징이었다. iOS는 여러모로 사용자 경험을 통제한다. 이에 대응하는 것이 Android의 자유 정책이었다. 그런데 구글의 행보를 보니 자기 맘대로 가고자 하는 행보가 보인다. 몇 몇 SD 카드를 험하게 쓰는 앱들을 통제하기 위해 다른 앱들의 기능을 심각하게 제한하는 것으로 이는 전형적인 규제,통제 정책이다. iOS와 크게 다를바가 없다. 앞으로 구글의 행보가 어찌 이어질지는 모르겠지만 이런식의 통제 정책으로 간다면 개발자가 사용자나 결국 다른 플랫폼으로의 이동을 고민할 수 밖에 없을 것 같다.

아무튼 각설하고 Kitkat 업데이트 후에도 전처럼 SD 카드를 활용하기 위해서는 루팅 외에는 답이 없다.

루팅을 한 후에 아래의 파일을 접근을 한다.

/system/etc/permissions/platform.xml

(이 파일의 내용 중 아래 빨간색으로 표시된 내용을 추가해준다.)

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
    <group gid="sdcard_r" />
    <group gid="sdcard_rw" />
   <group gid="media_rw" />
</permission>
<permission name="android.permission.WRITE_MEDIA_STORAGE" >
    <group gid="sdcard_rw" />
    <group gid="media_rw" />
</permission>

adb를 이용하는 방법

adb devices (adb 서비스를 시작한다)
adb pull /system/etc/permissions/platform.xml

(위 명령을 내리면 platform.xml 파일을 PC로 다운 받는다. PC로 다운 받아진 platform.xml 파일을 위와 같이 편집한다.
아래 내용들은 PC의 편집된 platform.xml 파일을 다시 안드로이드 기기로 옮기는 과정이다.)

adb push platform.xml /sdcard/
(위 라인이 실패하면 /mnt/sdcard/ 이용. 일단 platform.xml 파일을 안드로이드의 사용자 폴더로 업로드한다.)

adb shell
$ su (관리자 권한을 획득한다. 이 명령어를 사용하려면 루팅이 되어 있어야 한다.)
# mount -o remount,rw /system
(안드로이드 시스템 폴더는 기본적으로 읽기만 가능하도록 마운트 되어 있다. 읽기와 쓰기가 모두 가능하도록 다시 마운트 한다)
# cp /sdcard/platform.xml /system/etc/permissions/platform.xml
(위에서 /sdcard/를 사용하지 않았다면 여기서도 /mnt/sdcard/ 이용. 시스템 폴더로 platform.xml을 카피한다)
# mount -o remount,ro /system
(다시 시스템 폴더를 읽기 전용으로 마운트 한다)
# exit
(관리자 권한을 반환한다)
$ exit
(adb shell 명령을 종료한다)

adb reboot (안드로이드 기기를 재부팅한다)
adb kill-server (PC에 떠 있는 adb 서비스를 종료한다)

Posted by yyht
,