如何在安卓系统上更改hosts文件

74

我已成功对我的三星Galaxy Mini (android 2.2.1)进行了root,因为通常作为root权限,我认为我可以更改任何内容。

我想更改安卓上的hosts文件,以包括一些本地地址。 但是,我仍然收到消息说我没有权限这样做。 我尝试了以下选项:

  1. adb push /path/to/my/new/hosts /system/etc ...结果我得到了“只读文件系统”的响应。

  2. 直接在手机的shell中操作。 但这也不起作用。 我可以在控制台中执行su,但无法更改文件。

作为超级用户,我不能更改某些文件,这不奇怪吗?

4个回答

66

您已经获得了root权限,但仍需要重新挂载/system以进行读写操作。

$ adb shell
$ su
$ mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

点击这里了解更多信息:挂载文件系统以读写方式使用


3
adb可以直接执行这个操作吗?使用说明显示:adb remount - 重新将设备上的/system分区挂载为读写模式 - gsgx
1
如果您拥有root权限,可以使用以下命令查找/system路径和文件系统类型:adb shell su -c cat /proc/mounts - greg7gkb
2
@gsingh2011:在我的解锁 Nexus 4 上,adb remount 给我返回了错误 remount failed: Operation not permitted,而 adb root 则显示了错误 adbd cannot run as root in production builds。如果您知道如何让 adb remount 正常工作,我很乐意听取建议。 - Clayton Hughes
4
@ClaytonHughes 我知道这是老帖子了,但对于未来的读者,adb root && adb remount 在我使用的 Nexus 7 (2013) 上的 CM10.2 上完全正常。 - Brandon
2
即使使用重新挂载和root权限,对我来说仍然无法正常工作。 - JohnyTex
显示剩余5条评论

45
adb shell
su
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

假设您的/system是yaffs2,且位于/dev/block/mtdblock3。在大多数安卓手机上,更简单/更好的方法是:
adb shell
su
mount -o remount,rw /system

完成。这只是说明重新挂载/system为读写模式,您不必指定文件系统或挂载位置。


在我的设备上(Milestone 3,带有2.6.35.7-g9f70789),"device"是挂载所需的参数。但我可以省略-t yaffs2。 - Simon Woodside
7
对我来说mount -o remount,rw /system有效;而另一个命令mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system导致了mount: Permission denied的错误。 - KajMagnus
请注意,在Nexus 5X中需要执行mount -o rw,remount /system命令(使用"remount,rw"会出现“设备或资源忙”的错误)。 - 林果皞
这个很好用。 - voices

14

在我的情况下那并没有真正起作用 - 也就是说,为了覆盖 hosts 文件,你必须遵循它的指示,即:

./emulator -avd myEmulatorName -partition-size 280

然后在另一个终端窗口中(推送新的hosts文件/tmp/hosts):

./adb remount
./adb push /tmp/hosts /system/etc

1
没错,但这只适用于模拟器。我是在一个已经root的手机上工作的(三星Galaxy Mini,虽然我认为使用什么手机并不重要)。在物理设备上,您需要重新挂载系统分区。 - Filip Majernik
没错,我只在模拟器上测试过。知道了,谢谢。 - dsomnus
2
无法与最新的SDK(4.0.x)一起使用。./adb push /etc/hosts /system/etc 将'/etc/hosts'复制到'/system/etc/hosts'失败:内存不足。 - Mariuz
Mariuz - 谢谢,好知道。我在2.3上完成了它。 - dsomnus
2
这是一个较旧的线程,但值得注意的是,如果您在启动模拟器时没有指定“-no-snapstorage”,则可能会启动快照,而该快照将不具有分区大小。我遇到了同样的问题,直到我添加了“-no-snapstorage”。 - Nick Bork
显示剩余2条评论

11

可能最简单的方法是使用此应用程序Hosts Editor。您需要拥有root权限。


5
没问题,但是问题的描述是以“我已经成功获取了我三星Galaxy Mini的root权限”开始的,所以这不应该是一个问题。 - NiloVelez
1
据我所知,这个应用程序只允许您逐个编辑条目。我想读取一个10MB的新主机文件。 - jaybro

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