Android模拟器sd卡推送错误:只读文件系统。

72

我正在使用Android 1.6(Android SDK 2.1)进行开发。 我在Eclipse中使用avd管理器创建了一个avd。 当我启动这个avd时,我发现/sdcard目录的权限是“d---------”。 因此,我无法将文件推送到sd卡上。

有人知道如何解决这个问题吗?


试试这个:https://dev59.com/6nI95IYBdhLWcg3w8iv1#40449314 - intrepidis
21个回答

133

挂载:在fstab中“rootfs”不可由用户挂载。 - Jakob Alexander Eichler
2
非根设备不可用su。 - HendraWD

47

从一个 Shell 启动模拟器后,登录到另一个 Shell 并输入以下命令:

adb shell
你应该看到显示了# prompt,这是你的设备(模拟器)shell。现在,在adb shell中输入以下命令。
mount -o remount rw /sdcard

现在将会以rw(读写)权限重新挂载/sdcard,然后您可以使用以下命令从主机shell将文件推送到/sdcard

`adb push filename.mp3 /sdcard,`

其中filename.mp3可以是您想要推送到Android模拟器中的任何文件。

希望这可以帮到你 :)


即使重新挂载不起作用,也要检查链接是否正确。即 /sdcard -> /mnt/sdcard。如果已经正确链接,请检查目录 /mnt/sdcard 的权限。如果必要的权限不存在,则发出 chmod 命令进行更改。例如 # chmod 0777 /mnt/sdcard 应该可以解决问题。 PS:通常情况下您不需要执行权限。 - C--
12
我跟@Hissain遇到了同样的问题。我用以下命令解决了它:mount -o rw,remount rootfs /chmod 777 /mnt/sdcard。希望这能帮到你。 - TragedyStruck
su:未找到... mount:权限被拒绝 - Marek Bernád

18

在模拟器的AVD管理器工具中要确保两件事:

  1. SD卡大小已经被指定,例如512。

  2. 从硬件标签中,点击“新增”并从下拉菜单中选择“SD卡支持”。

现在,启动模拟器。SD卡现在将支持写入操作。


2
硬件标签在哪里?我在编辑Android虚拟设备(AVD)中没有看到它。 - tumbudu
我只看到在命令行上创建的AVD中有硬件标签。 - tumbudu

10

Android studio版本0.8.9及以上存在一个创建AVDs的错误。

请参见问题78434

解决方法

  • 进入.android文件夹中的ADV文件夹,找到AVD config.ini文件
  • 使用能够处理UNIX换行符的文本编辑器打开它。(记事本会将这些行连在一起,因为它们没有CR-LF。)
  • hw.sdCard=no 更改为 hw.sdCard=yes

这对所有新版用户都应该有效。


2
谢谢提供的链接,这对我很有帮助。现在推荐的解决方案是找到您的AVD config.ini文件,并将hw.sdCard=no更改为hw.sdCard=yes。这对我有效。 - Tim Malseed
是的,这是新的解决方案。不客气 :) 很高兴它能帮助到你。是的,这是非常好的解决方案。因为只要这个问题存在,即使使用所有这些 Linux 代码也没有办法解决 :) - afra mehrparvar
真是惊人,因为这个问题我浪费了这么多时间...非常感谢! - rectummelancolique

7
也许听起来很傻,但当我遇到同样的问题时,这对我有用:通过AVD管理器删除已创建的avd并创建一个带有512MB的sd卡的新avd。
检查两者是否具有正确的权限,如果没有,请尝试使用chmod更改它们。
如果一切仍然失败,请通过终端手动创建avd和sd卡并重复此过程。
android create avd -n my_avd -t 7
mksdcard -l e 512M mysdcard.img
emulator -avd my_avd -sdcard mysdcard.img

希望这有所帮助!

@AnkitSrivastava 你应该在终端(我的情况下是bash)中执行这些命令。 - Edu Zamora
不需要重新创建 AVD,只需重启它即可。 - jab
是的。创建另一种类型的 AVD 是有效的。谢谢。这也解决了另一个问题。现在我可以使用相机了。 - makkasi

7

我认为问题在于你忘记设置SD卡大小

按照以下步骤进行操作:

  1. 步骤1:关闭正在运行的模拟器
  2. 步骤2:打开Android虚拟设备管理器(Eclipse菜单栏)
  3. 步骤3:选择你的模拟器-> 编辑 -> 然后设置SD卡大小

这在我的模拟器中运行良好!


4
确保在为特定模拟器创建 AVD 窗口中,为 SD 卡大小赋值时,该值大于零

4

我试了@user2002993的建议,但其中有一个地方需要做一些小修改,所以我进行了编辑,并在Android Studio和模拟器Android 5上成功实现了以下操作:

去到adb文件夹,在空白区域右键单击,选择“在此处打开命令窗口”,或者如果你是通过adb-installer安装adb,请打开cmd并输入以下命令:

adb devices

它应该显示您的模拟器编号和详细信息。然后在此处输入命令:

adb shell

现在它应该向您显示提示符号 #。
su

mount -o rw,remount rootfs

chmod 777 /mnt/sdcard

exit

exit

是的,需要双重退出,现在你的adb shell提示符已经消失了。将文件放入adb文件夹中,执行此命令,看看是否解决了问题。
adb push "your file name like : 1.jpg" /sdcard/

或者
adb push "your file name like : 1.jpg" /storage/sdcard/

现在在命令提示符中,应该显示传输时间而不是可怕的只读内容。

很遗憾,我看到 Android Studio 版本 8.10 及以上版本对工作室结构进行了一些更改,导致出现此错误。我已经在 8.09 版本上进行了测试,没有出现只读错误。希望 Google 能够解决这个问题。 - afra mehrparvar

3

mount -o remount, rw /sdcard

这是在模拟器中重新挂载SD卡的正确方法。


2

我将模拟器的SD卡虚拟内存增加到512 MB,这已经足够了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接