持久化修改Android Emulator hosts文件的方法

7次阅读
没有评论

如何持久化修改Android Emulator的hosts文件

最近有用户遇到了一个棘手的问题:无法永久修改Android Emulator中的/system/etc/hosts文件。尽管他已经成功地使用了ADB shell获取root权限并进行了编辑,但在重启设备或关闭后发现修改的效果消失。本篇文章将详细探讨这一问题的原因及解决方法。

一、背景与现象

  1. 用户尝试在Emulator中通过 adb shell 获取root权限。
  2. 顺利进入root模式,并对/system/etc/hosts文件进行了修改。
  3. 修改后,重启设备或关闭Emulator时,发现之前加入的IP-域名对应关系丢失。

二、问题分析

  1. Emulator系统分区设置:通常情况下,在正常运行的生产环境中的Emulator中,/system 不是可写的。这意味着用户在 adb shell 中执行的任何修改都是临时的,并不会被持久化到下次启动时继续生效。
  2. root权限获取问题:部分用户反馈无法通过adb root来获得永久性root权限。可能的原因包括使用的是正式版本而非调试版本。

三、解决方案

  1. 彻底根授权
  2. 根据官方文档及社区的一些贴子,解决临时root的问题需要在启动Emulator时加上 emulator-x86 -avd [avd_name] -writable-system 这样的参数。
  3. 具体命令如下:
    bash
    emulator-x86 -avd my_avd -writable-system -no-snapshot-load

  4. 编辑 hosts 文件

  5. 通过 root 权限编辑完成后,记得重新启动并检查hosts文件有没有发生变化。

  6. 系统分区处理

  7. 在一些情况下如遇到 system.img 导致的问题,可通过备份和替换原文件来解决。但这种方法可能会导致其他Emulator受到影响。
  8. 使用第三方工具辅助:可以利用一些主机编辑器应用如 https://play.google.com/store/apps/details?id=com.nilhcem.hostseditor,更方便地进行修改操作。

四、实际操作步骤

  1. 使用正确的AVD并添加参数启动:
    bash
    emulator-x86 -avd my_avd -writable-system -no-snapshot-load
  2. 检查命令运行状态,确保能够正常root,并访问 /system/etc/hosts
  3. cat /system/etc/hosts 查看内容,确保没有意外覆盖原有数据。
  4. 执行修改操作:
    bash
    echo '192.168.1.181 sandbox.dmoney.com.bd' >> /system/etc/hosts

五、注意点

  • 操作过程中务必谨慎,错误的操作可能会导致Emulator无法正常启动。
  • 如果使用了 system.img 替换方式,请确保不会影响到其他Emulator。在测试后应将其恢复原状。

最终经过这一步步的处理,我们可以通过根授权的方式将自定义内容永久植入 Emulator 的 hosts 文件中,满足开发或测试需求的同时规避数据丢失风险。

正文完