如何持久化修改Android Emulator的hosts文件
最近有用户遇到了一个棘手的问题:无法永久修改Android Emulator中的/system/etc/hosts
文件。尽管他已经成功地使用了ADB shell获取root权限并进行了编辑,但在重启设备或关闭后发现修改的效果消失。本篇文章将详细探讨这一问题的原因及解决方法。
一、背景与现象
- 用户尝试在Emulator中通过
adb shell
获取root权限。 - 顺利进入root模式,并对
/system/etc/hosts
文件进行了修改。 - 修改后,重启设备或关闭Emulator时,发现之前加入的IP-域名对应关系丢失。
二、问题分析
- Emulator系统分区设置:通常情况下,在正常运行的生产环境中的Emulator中,
/system
不是可写的。这意味着用户在adb shell
中执行的任何修改都是临时的,并不会被持久化到下次启动时继续生效。 - root权限获取问题:部分用户反馈无法通过adb root来获得永久性root权限。可能的原因包括使用的是正式版本而非调试版本。
三、解决方案
- 彻底根授权
- 根据官方文档及社区的一些贴子,解决临时root的问题需要在启动Emulator时加上
emulator-x86 -avd [avd_name] -writable-system
这样的参数。 具体命令如下:
bash
emulator-x86 -avd my_avd -writable-system -no-snapshot-load编辑 hosts 文件
通过 root 权限编辑完成后,记得重新启动并检查hosts文件有没有发生变化。
系统分区处理
- 在一些情况下如遇到
system.img
导致的问题,可通过备份和替换原文件来解决。但这种方法可能会导致其他Emulator受到影响。 - 使用第三方工具辅助:可以利用一些主机编辑器应用如 https://play.google.com/store/apps/details?id=com.nilhcem.hostseditor,更方便地进行修改操作。
四、实际操作步骤
- 使用正确的AVD并添加参数启动:
bash
emulator-x86 -avd my_avd -writable-system -no-snapshot-load - 检查命令运行状态,确保能够正常root,并访问
/system/etc/hosts
。 - 用
cat /system/etc/hosts
查看内容,确保没有意外覆盖原有数据。 - 执行修改操作:
bash
echo '192.168.1.181 sandbox.dmoney.com.bd' >> /system/etc/hosts
五、注意点
- 操作过程中务必谨慎,错误的操作可能会导致Emulator无法正常启动。
- 如果使用了
system.img
替换方式,请确保不会影响到其他Emulator。在测试后应将其恢复原状。
最终经过这一步步的处理,我们可以通过根授权的方式将自定义内容永久植入 Emulator 的 hosts 文件中,满足开发或测试需求的同时规避数据丢失风险。
正文完