官方下载的SDK的模拟器是支持sd card的,但是自己下载donut之后编译,把生成的三个镜像替代掉,重启模拟器,居然无法加载模拟器,分析原因,就是模拟器根本就没有加载。这里我们来分析一下,Android是怎样加载模拟器的。
android cupcake donut SDCard mountd vold problem
Android 在 cupcake 和 donut 分支仿真器启动后一般都会有 SD Card Read-Only 问题。这个问题并不是说 SDCard 属性为只读。这种情况实际上是 SDCard 根本就没有加载成功。在 cupcake 前的 1.0 版本中采用 mount.conf 对 SDcard 进行 mount , cupcake 之后就用 vold.conf 替代了 mountd.conf
方法1:使用vold.conf
在 ~/android/build/core/main.mk 文件中加入如下一段话
################################################################################
# Install a vold.conf file is one's not already being installed.
ifeq (,$(filter %:system/etc/vold.conf, $(PRODUCT_COPY_FILES)))
PRODUCT_COPY_FILES += /
development/data/etc/vold.conf:system/etc/vold.conf
ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
$(warning implicitly installing vold.conf)
endif
endif
##################################################################################
然后重新
make
make sdk
方法2:使用mountd.conf
编译mountd,并在文件系统中启动这一服务。( cupcake donut 分支下载时在system/core中并没有mountd目录而在源码树中有,这种情况需自行手动下载 )
修改 system/core/mountd/Android.mk文件,开放最后一行
# disabled - we are using vold now instead
# include $(BUILD_EXECUTABLE)
为:
# disabled - we are using vold now instead
include $(BUILD_EXECUTABLE)
然后 make mountd
增加 安装mountd.conf 文件
修改 system/core/rootdir/init.rc文件
释放下两行:
service mountd /system/bin/mountd
socket mountd stream 0660 root mount
修改 system/core/rootdir/Android.mk 文件, 增加 etc/mountd.conf /,如下:
etc/dbus.conf /
etc/init.goldfish.sh /
etc/mountd.conf /
etc/hosts
转载请注明此出处!!

最后拷贝文件到sdcard中如下:
adb push D:/a.mp3 /sdcard
以上的请注意使用"/sdcard",此为sdcard文件夹根目录。
此外执行以上命令,还看不到文件,还需要在模拟器中的Dev tools里面scan一下媒体文件。如果是mp3文件,可以在music程序中的歌曲中查看到。