如何在nougat中运行的Android Studio模拟器中编辑/ etc/hosts文件?

Chr*_*ero 28 android android-emulator android-studio

任何人都知道如何编辑在nougat中运行的android工作室模拟器中的/ etc/hosts文件?我将编辑它,以便我可以在我的本地Web服务器中使用我的虚拟主机.我尝试使用adb通过终端进行编辑,但是它返回了只读文件系统.尝试也使用chmod但仍然失败.

更新:我还尝试使用adb $ ./adb -s emulator-5554 push~/Desktop/hosts/system/etc/hosts拉取文件

adb:错误:无法将'/ Users/Christian/Desktop/hosts'复制到'/ system/etc/hosts':无法创建文件:只读文件系统

P.O*_*.W. 56

1) android-sdk-macosx/tools/emulator -avd <avdname> -writable-system
2) ./adb root
3) ./adb remount
4) ./adb push <local>/hosts /etc/hosts
Run Code Online (Sandbox Code Playgroud)

Android文件主机即可

/etc/hosts <--- This worked for me
/etc/system/hosts
/system/etc/hosts
Run Code Online (Sandbox Code Playgroud)

校验

1) ./adb shell
2) cat /etc/hosts
3) ping customsite.com
Run Code Online (Sandbox Code Playgroud)

  • 如果您无法执行adb root`adbd无法在生产版本中作为root运行,则应使用Google Api而不是Google Play创建新的仿真器映像。他们在这里描述了它/sf/ask/3074679751/#45668555 (5认同)
  • 如果使用 Windows,请确保您的主机文件使用 unix 样式结尾,否则它将被忽略/模拟器将崩溃/等等。 (3认同)
  • 注意:目前不适用于 API29+,因此只需使用 API28 或更低版本。 (3认同)
  • 我真的很喜欢解决方案的简洁性,尽管它与其他答案几乎相同. (2认同)
  • 启动avd时,`-writable-system`非常重要。在命令末尾添加`&`以在后台启动。 (2认同)
  • 看起来这些更改仅在使用`-writable-system`时才持续存在。如果运行不带该参数的映像,则主机文件上没有任何更改。如果再次设置`-writable-system`,新行将重新出现。这可能会迫使用户始终通过命令行运行仿真器。 (2认同)
  • 确保在主机文件的最后一个条目之后有一个空行 (2认同)
  • `adb remount` 给出“重新安装失败” (2认同)

小智 12

以下是我在OSX上的工作方式.在阅读了一堆不同的指令之后,似乎没有什么对我有用,直到有人提到你有一个非常狭窄的窗口,用于将文件从磁盘复制到模拟设备,或者它再次变为只读

  1. 启动你的模拟器.
  2. 在终端中找到适用于您设备的文件夹"platform-tools"
  3. 准备要复制到设备的主机文件(在我的情况下,我把它放在桌面上)
  4. 串起一堆命令来快速复制文件.这对我./adb root && ./adb -s emulator-5554 remount && ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts有用'模拟器-5554'是我的设备名称,你可以通过输入找到./adb devices

之后终端回应了

restarting adbd as root remount succeeded [100%] /system/etc/hosts

你可以veryfy的副本是由全成./adb shell,然后cat /system/etc/hosts

然后,我可以从模拟设备连接到我的虚拟主机

在这里完成是我的主机文件的样子 10.0.2.2 my-virtual-host

我希望这可以帮助别人,因为我花了很长时间试图解决这个问题.

  • 我还发现我必须冷启动模拟器才能第二次运行命令。 (2认同)

Phi*_* D. 12

解决这个问题的另一种方法是使用adb命令行工具。

\n
    \n
  1. 确保路径中有模拟器工具
  2. \n
\n
export ANDROID_HOME="/Users/YOUR_USERNAME/Library/Android/sdk"\nexport PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$PATH\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:对于Windows应该是这样的(而不是需要平台工具[或adb所在的路径]的工具)

\n
C:\\Users\\YOUR_USERNAME\\AppData\\Local\\Android\\sdk\\platform-tools\nC:\\Users\\YOUR_USERNAME\\AppData\\Local\\Android\\sdk\\emulator\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 检查设备名称(最好是没有空格的短名称,例如 API30X86)
  2. \n
\n
emulator -list-avds\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 然后使用以下参数启动模拟器:
  2. \n
\n
emulator -avd YOUR_AVD_NAME -writable-system -no-snapshot-load -no-cache\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 运行以下命令以root身份运行并以root身份重新挂载分区系统
  2. \n
\n
adb devices  #you should see your devices\nadb root\nadb shell avbctl disable-verification\nadb reboot\nadb root\nadb remount \n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 重新安装后,您应该能够将编辑后的主机文件从您的计算机推送到模拟器。
  2. \n
\n
adb push ~/Documents/hostsandroid /etc/hosts\n
Run Code Online (Sandbox Code Playgroud)\n

现在您应该能够使用 Android Studio 中的设备文件资源管理器查看您的主机文件。\n编辑:在这种情况下,您看不到设备文件资源管理器,如果检测到 Android 框架,您可以检查事件日志。如果是这样,请单击“配置”,然后就完成了。\n
在此输入图像描述

\n
\n当您要再次运行并使用新会话推送新更改时,您\xe2\x80\x99 只需要做:\n
export ANDROID_HOME="/Users/YOUR_USERNAME/Library/Android/sdk"\nexport PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$PATH\n
Run Code Online (Sandbox Code Playgroud)\n

  • 该错误的答案是,您无法在安装了 Google Play 的模拟器上执行此操作。 (2认同)

Md.*_*mun 11

一步步

  1. 不要使用Google Play图像创建AVD
  2. 例如,使用Google API Intel x86 Atom系统映像
  3. 使用以下命令启动仿真器…

    emulator.exe –avd <avd name> -writable-system
    
    Run Code Online (Sandbox Code Playgroud)

例如:

    C:\Users\ilyas.mamun\AppData\Local\Android\Sdk\emulator>emulator.exe -avd Pixel_API_25 -writable-system

    emulator: WARNING: System image is writable
    HAX is working and emulator runs in fast virt mode.
    audio: Failed to create voice `goldfish_audio_in'
    qemu-system-i386.exe: warning: opening audio input failed
    audio: Failed to create voice `adc'
Run Code Online (Sandbox Code Playgroud)
  1. 根植并重新安装AVD,如下所示…

    C:\Users\ilyas.mamun\AppData\Local\Android\Sdk\platform-tools>adb root
    
    C:\Users\ilyas.mamun\AppData\Local\Android\Sdk\platform-tools>adb remount
    remount succeeded
    
    C:\Users\ilyas.mamun\AppData\Local\Android\Sdk\platform-tools>adb shell
    eneric_x86:/ # cd system
    generic_x86:/system # cd etc
    generic_x86:/system/etc # cat hosts
    127.0.0.1       localhost
    ::1             ip6-localhost
    
    generic_x86:/system/etc # echo "192.168.1.120   ilyasmamun.blogspot.com" >> hosts
    generic_x86:/system/etc # cat hosts
    
    127.0.0.1       localhost
    ::1             ip6-localhost
    192.168.1.120     ilyasmamun.blogspot.com
    generic_x86:/system/etc #
    
    Run Code Online (Sandbox Code Playgroud)


Chr*_*ero 6

我可以通过使用-writable-system启动仿真器并使用adb remount重新安装仿真器来编辑/ etc / hosts文件。之后,模拟器内的主机文件是可编辑的。我尝试推送/替换文件并成功。


Rag*_*hav 6

以下是我在 Windows 终端上的 Windows 机器上遵循的步骤: 运行以下命令以了解您的 AVD:

emulator -list-avds
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

运行以下命令以打开可写模式的模拟器:

emulator -avd Pixel_XL_API_29 -writable-system -no-snapshot-load
Run Code Online (Sandbox Code Playgroud)

将 Pixel_XL_API_29 替换为您的 AVD 名称。

在此处输入图片说明

忽略那里的警告。

在新的终端选项卡中运行以下命令:

  • 亚行根
  • adb shell avbctl 禁用验证
  • 亚行重启

在此处输入图片说明

等待您的模拟器重新启动。最多可能需要 1 分钟。

在此处输入图片说明

模拟器重启后,运行以下命令:

  • 亚行根
  • 亚行重新挂载

之后您将收到重新安装成功的消息:

在此处输入图片说明

现在是时候将我们的主机文件从 Windows 机器推送到 Android 的模拟器了

adb push D:\hosts /system/etc/
Run Code Online (Sandbox Code Playgroud)

D:\hosts 是我的 Windows 机器的 D 驱动器中存在的主机文件的位置。/system/etc/ 是 Android 模拟器中我们要复制该文件的位置。

成功操作后,您将看到如下消息: 在此处输入图片说明

要验证主机文件是否已推送,您可以运行以下命令:

  • 亚行外壳
  • 光盘系统
  • 光盘等
  • 猫主人

您将在终端中看到 hosts 文件的内容:

在此处输入图片说明


小智 5

请按照以下 3 个步骤操作:

  1. 以可写模式启动模拟器:./emulator -avd <emulator_name> -writable-system
  2. 重新安装:adb remount
  3. 推送附加的主机文件:adb push hosts /system/etc/

笔记 :

  1. 按照上述步骤运行一个且仅一个 emulator_name
  2. 可执行文件emulator位于 android-sdk 内。对我来说它是在sdk/emulator
  3. 附加的主机文件将解析www.facebook.com为 127.0.0.1,因此www.facebook.com在模拟器上被阻止。


Bak*_*ker 5

虽然乏味,但有效,您可以在模拟器 shell 中逐行构建一个新的主机文件。

重新安装模拟器

您可以在 PC/Mac/linux 命令行/powershell/终端中编辑/重新安装模拟器(以获得可写文件系统)。

(如果模拟器已经在运行,请将其停止,然后...):

emulator -avd <avdname> -writable-system

(这将启动一个具有可写文件系统的新模拟器)

仍然在您的 PC/Mac/Linux 终端中运行以下两个命令:

adb root

adb remount

然后通过 shell 连接到正在运行的模拟器:

adb shell

下面的这部分是从模拟器内部、刚刚建立的 shell 连接内运行的。

给自己 root 访问权限:

su

将目录更改为hosts保存文件的位置:

cd /etc

要使模拟器遵循开发计算机的主机文件或给定域的 DNS,请使用 ip 添加域条目10.0.2.2

将新域条目行附加到模拟器主机文件的示例:

echo '10.0.2.2 mydev.domain.com' >> hosts

10.0.2.2是Android模拟器的特殊地址。它将将该域的 DNS 请求代理到您的开发计算机。因此,无论您的 PC/Mac/Linux 计算机托管 mydev.domain.com 文件列表的 IP 地址是什么,Android 模拟器都会使用它。

您现在可以退出根 shell 和模拟器 shell:

exit
exit
Run Code Online (Sandbox Code Playgroud)

(第一个让你摆脱su。第二个从模拟器外壳退出,让你回到开发机器的终端)。

你完成了。您可以在模拟器中打开 Web 浏览器,在地址栏中键入刚刚添加到主机的域,然后检查模拟器是否正确路由该域。

Remount failed

如果您使用的是 Android 模拟器 29+ 并且正在获取

remount failed
Run Code Online (Sandbox Code Playgroud)

致电时adb remount,请在此处查看Kidd Tang 的解决方法


nam*_*yap 5

  1. 首先找到你的系统hosts文件并将其复制到桌面

  2. 创建后,使用系统映像 Nougat x86_64 Android 7.1.1(非 Google API 版本)创建虚拟设备 Nexus 5

  3. 然后在终端中转到 /Android/sdk/emulator 然后运行以下代码请在下面添加您自己的设备名称,因为我的是 Nexus_S_API_25 =>

  • ./模拟器-可写系统-netdelay无-netspeed full-avd Nexus_S_API_25
  1. 之后打开一个新终端并转到此位置 /Android/sdk/platform-tools
  • 然后运行
  • ./adb根
  • ./adb 重新安装
  • ./adb push ~/Desktop/hosts /system/etc/hosts - (它将复制您的 Desktop/hosts 文件并将其粘贴到模拟器主机文件中,即 /system/etc/hosts)
  1. 这就是您的模拟器主机文件已更新现在,如果您想重新检查,请运行以下代码
  • ./adb 外壳
  • cat /system/etc/hosts (它将显示模拟器主机文件)
  1. 重启模拟器即可看到变化
  • ./adb 重新启动