原文地址 如有侵权,联系删除
前言
在开发的时候我们可能会需要修改Android的hosts文件。Android的hosts文件路径是/system/etc/hosts,在修改该文件前首先需要Android手机获取root权限。至于如何root你的手机,这里就不加详述,可以自行在网络上查找,很多也很简单。
本文将要阐述的是如何在命令行下通过adb程序访问root过的手机,把hosts拖到电脑上修改,然后再复制回手机来实现修改hosts的方法。
下面就开始具体的步骤:
adb pull /system/etc/hosts hosts.mod
[100%] /system/etc/hosts
上面的命令是把手机上的hosts文件拖到电脑上,[100%]表明文件已经传输完成,可以修改hosts文件了。在修改完成后就使用以下命令上传到手机:
adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system
从回显的消息可以看到,文件系统是只读的,所以不能直接上传。
试试以下的命令看能不能成功?!
C:\tools>adb root # 帮助文档说该命令可以让adbd守护进程获得root权限
C:\tools>adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Read-only file system
还是不行,看来要重新挂载/system目录才可以。
adb remount
remount failed: Operation not permitted
没有权限?这是必须祭起shell大法的节奏啊!
adb shell
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
shell@maguro:/ $ ls -al /system/etc/hosts
-rw-r--r-- root root 25 2013-08-14 07:00 hosts
从上面最后一行可以看出hosts这个文件只有它的拥有者能写入,对于其他人来说都是只读的。要想让其他人也能做修改,必须使用以下命令进行提权,再改变hosts文件的属性才行。
shell@maguro:/ $ su
如果是第一次执行这个命令,手机会亮起,SuperSU应用会提示你是否同意权限的分配。这里当然是要同意的!接着你就可以看到终端下的提示符从$变成了#,@前的字符也由shell变成了root。然后我们就可以修改hosts文件的权限属性了。
root@maguro:/ # chmod +666 /system/etc/hosts
Bad mode
root@maguro:/ # chmod 666 /system/etc/hosts
Unable to chmod /system/etc/hosts: Read-only file system
又是Read-only file system!输入以下命令看看/system目录的文件系统详情呢。
root@maguro:/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
看到ext4后面的ro了吗?它是read only的缩写,即只读的意思。这说明/system目录是只读的。接下来我们要把它改成可以读写。
root@maguro:/ # mount -o rw,remount /system
上面的-o用于指定加载文件系统时的选项。这些选项包括:
- remount 重新加载设备。通常用于改变设备的设置状态。
- ro 以只读模式加载。
- rw 以可读写模式加载。
再次查看,可以看到原来ro的位置已经变成rw了。
root@maguro:/ # mount | grep system
/dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
不过到这里我们还不能向手机拷贝hosts文件,因为hosts文件的权限属性还没被改过,如果强行上传的话,会得到如下的错误消息:
adb push hosts.mod /system/etc/hosts
adb: error: failed to copy 'hosts.mod' to '/system/etc/hosts': Permission denied
运行以下命令:
root@maguro:/ # chmod 666 /system/etc/hosts
然后查看hosts文件的属性。
root@maguro:/ # ls -al /system/etc/hosts
-rw-rw-rw- root root 25 2013-08-14 07:00 hosts
可以看到所有人都可以读写hosts文件了。
既然一切都准备就绪,那就再来试试上传修改后的hosts文件吧。
adb push hosts.mod /system/etc/hosts