안드로이드 SDK 빌드 후 SD Card 문제 해결 #2
밥벌이2010. 5. 3. 22:33
커스텀 SDK 빌드해서 릴리즈 하고 나니, 그거 받아 돌려보던 사람들이 SD 카드가 안된다고 한다. 예전에야 혼자서 테스트하던 때니 필요할 때 단순히 shell 띄우고 mount 직접해서 썼지만, 이제 배포하는 놈이 되다보니 문제가 된다.
찾아보니 mounting daemon으로 Volume Daemon, 즉 vold라는 놈을 쓴다고 하는데 SDK 빌드할 때 이 vold의 컨픽파일이 시스템에 알아서 설치되진 않는 듯 하다. (http://www.mail-archive.com/android-developers@googlegroups.com/msg31253.html 참고) 또한 예전에 적은, adb shell에서 직접 마운트 해주는 방법은, 그 땐 몰랐지만 단순히 쉘이나 DDMS에서 접근할 수 있을 뿐 갤러리나 카메라에서 SD 카드를 인식하지 않는 모양이다. 어쨌건 다음과 같이 build/core/main.mk를 수정하자.
# Install an apns-conf.xml file if one's not already being installed.ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))PRODUCT_COPY_FILES += \development/data/etc/apns-conf_sdk.xml:system/etc/apns-conf.xmlifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)$(warning implicitly installing apns-conf_sdk.xml)endifendif# added by ysjang# Install vold.conf to fix sd card problemifeq (,$(filter %:system/etc/vold.conf, $(PRODUCT_COPY_FILES)))PRODUCT_COPY_FILES += \development/data/etc/vold.conf:system/etc/vold.confifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)$(warning implicity installing vold.conf)endifendif# @@ ysjang# If we're on an eng or tests build, but not on the sdk, and we have# a better one, use that instead.
문제는 이 다음이다. 이 파일을 수정하고 DDMS로 밀어넣었더니 동작하지 않길래 빌드까지 새로 하고 집어넣어봤지만 여전히 SD카드가 제거되었다는 Notification이 에뮬레이터 시작하자마자 뜬다.
같은 현상을 겪는 사람들이 있나 엄청난 구글링을 해 봤지만, 내가 구글신의 신탁을 못 받은 것인지... 어쨌건 같은 현상을 겪는 사람들을 찾기는 힘들었다. 그러다 디바이스 쪽 쉘에서 vold를 직접 실행할 때 파일을 열지 못했다는 메시지가 나왔던 게 마음에 걸려, 저 위치에 시스템 파일들이 실제로 있는 것인지 확인해야 하겠다는 생각이 들어 adb shell로 확인해 보니....
/sys/devices/platform/goldfish_mmc.0/mmc_host/ 아래엔 mmc1이 들어 있고, /sys/devices/platform/goldfish_mmc.1/mmc_host/ 아래엔 mmc0 가 들어 있었는 기현상을 확인할 수 있었다. 일단 현재 잡혀있는 대로 vold.conf를 고치고 밀어 넣으니 잘 동작한다.
## vold configuration file for the emulator/SDK
volume_sdcard {## This is the direct uevent device path to the SD slot on the device#emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc1
media_type mmcmount_point /sdcardums_path /devices/platform/usb_mass_storage/lun0}
뭐가 문제인지는 qemu 분석하다보면 알아낼 수 있을 것 같긴 한데, 지금 당장은 그거 파고들 여유가 없어서 여기까지만 정리함. 나중에 시간 나면 qemu 분석도 한 번 해봐야겠다.
살다 살다 이런 경우는 또 처음 보네... 뭐 쉽게 되는게 하나도 없냐 -_- 제기랄
'밥벌이' 카테고리의 다른 글
DexClassLoader를 사용한 다른 패키지의 클래스 로딩 (1) | 2011.03.02 |
---|---|
@hide, Android Javadoc에는 있으나 SDK에는 없는 클래스들 (0) | 2010.05.07 |
Linux용 SDK를 이용하여 Android Windows SDK 빌드하기 (2) | 2010.05.02 |
안드로이드 Native 단에서 GDB로 디버그하기 (4) | 2010.05.01 |
안드로이드 Native 단에서 LOG 출력 (0) | 2010.05.01 |