如何通过adb编辑安卓hosts文件?推送报错、无法进root怎么办
问题原因
所有报错都来自量产安卓设备的默认安全限制:
/system分区默认只读挂载,无特殊权限无法写入,这是push命令报Read-only file system的直接原因- 正式发售的生产版固件(user build)默认禁用
adb root权限,也不会内置su二进制文件,所以执行su和adb root都会失败 - 安卓原生shell环境默认不预装vi/nano/gedit这类文本编辑器,直接调用会提示命令不存在
可行方案
无Root方案(不修改系统分区,不影响保修,不清除数据)
如果只是需要实现自定义域名解析,不需要硬改系统hosts文件,优先选这类方案:
- 本地VPN映射:安装支持自定义hosts规则的本地VPN类工具,导入你要配置的hosts规则后启动服务,所有网络请求会优先匹配自定义规则,全程不需要特殊权限。
- 代理映射:在设备Wi-Fi设置中配置代理指向你可控的本地代理服务(比如PC端运行的抓包工具、代理工具),在代理规则中配置对应的域名-IP映射关系即可。
修改系统原生hosts方案(需解锁Bootloader,会清空全机数据,可能丧失保修)
如果必须修改/system/etc/hosts原文件,必须先解锁设备Bootloader,之后二选一操作:
- 获取Root权限后修改
解锁BL后刷入Magisk获取完整root权限,连接adb后执行以下命令:adb shell su # 安卓11及以下版本执行重挂载命令 mount -o rw,remount /system exit exit # 推送本地hosts文件到设备 adb push 本地hosts文件完整路径 /system/etc/hosts # 配置正确的文件权限 adb shell chmod 644 /system/etc/hosts注意:安卓12及以上版本系统分区采用EROFS只读文件系统,直接remount无效,可以制作包含自定义hosts的Magisk模块刷入生效,不需要直接修改分区文件。
- 第三方Recovery模式下修改
解锁BL后刷入对应机型的第三方Recovery(如TWRP),重启进入Recovery模式后,在高级菜单中开启adb调试,挂载system分区为可写,直接执行push命令替换hosts文件即可,不需要启动进入系统。
内容的提问来源于stack exchange,提问作者Ashutosh
相关产品推荐
相关产品推荐

