如何在牛轧糖的 Android Studio 模拟器 运行 中编辑 /etc/hosts 文件?
How to edit /etc/hosts file in Android Studio emulator running in nougat?
有人知道如何在 nougat 的 android studio 模拟器 运行 中编辑 /etc/hosts 文件吗?我将对其进行编辑,以便可以在我的本地 Web 服务器中使用我的虚拟主机。我尝试使用 adb 通过终端编辑它,但是它返回只读文件系统。也尝试使用 chmod 但仍然失败。
更新:
我还尝试使用 adb 拉取和推送文件
$ ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts
adb:错误:无法将“/Users/Christian/Desktop/hosts”复制到“/system/etc/hosts”:无法创建文件:只读文件系统
您可以使用 ADB Shell 通过更改访问权限(只读到 RW)来编辑文件
我能够通过使用 -writable-system 启动模拟器并使用 adb remount 重新安装模拟器来编辑 /etc/hosts 文件。之后,模拟器内的主机文件是可编辑的。我尝试 pushing/replacing 文件并成功。
这是我在 OSX 上的工作方式。在阅读了一堆不同的说明之后,似乎没有什么对我有用,直到有人提到你有一个非常狭窄的 window 用于将文件从你的磁盘复制到模拟设备或者它再次变为只读
- 启动模拟器。
- 在您的终端中为您的设备找到文件夹 "platform-tools"
- 准备要复制到设备的主机文件(在我的例子中,我把它放在桌面上)
- 把一堆命令串起来快速复制文件。这对我有用
./adb root && ./adb -s emulator-5554 remount && ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts
'emulator-5554' 是我的设备名称,您可以通过键入 ./adb devices
找到它
之后终端响应
restarting adbd as root
remount succeeded
[100%] /system/etc/hosts
您可以通过 ./adb shell
和 cat /system/etc/hosts
确认复制成功
然后我可以从模拟设备连接到我的虚拟主机
为了完整起见,我的主机文件看起来像这样
10.0.2.2 my-virtual-host
我希望这对某人有所帮助,因为我花了很多时间试图解决这个问题。
遵循以下 3 个步骤:
- 以可写模式启动模拟器:
./emulator -avd <emulator_name> -writable-system
- 重新挂载:
adb remount
- 推送主机文件 attached :
adb push hosts /system/etc/
注:
- 运行 一个并且只有一个 emulator_name 上面的步骤
- 可执行文件
emulator
位于 android-sdk 中。对我来说是 sdk/emulator
.
- 附加的主机文件会将
www.facebook.com
解析为 127.0.0.1,因此会在模拟器上阻止 www.facebook.com
。
1) android-sdk-macosx/tools/emulator -avd <avdname> -writable-system
2) ./adb root
3) ./adb remount
4) ./adb push <local>/hosts /etc/hosts
Android 文件主机可以是
/etc/hosts <--- This worked for me
/etc/system/hosts
/system/etc/hosts
检查
1) ./adb shell
2) cat /etc/hosts
3) ping customsite.com
尝试@P.O.W回答,
确保在主机文件的最后一个条目之后有一个空行
如果在主机文件中使用制表符,请将其替换为空格
重新启动 Android 并重试:
adb reboot
循序渐进
- 不要用 Google 播放图像创建 AVD。
- 例如使用 Google API Intel x86 Atom System Image。
使用以下命令启动模拟器...
emulator.exe –avd <avd name> -writable-system
例如:
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'
根目录并重新挂载 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 #
place all these export in z shell using terminal
vim ~/.zshrc press enter
then zshell will open
then press i
past all the export (verify the path i have used all default location for instalation)
then press esc
then press this :wq!
press enter
close terminal and open it again
export PATH="$PATH:$HOME/Dev/flutter/bin"
export GEM_HOME=$HOME/.gem
export PATH=$GEM_HOME/bin:$PATH
export ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
only use google apis image do not usese play image
u will get list of avds
emulator -list-avds
emulator -avd Nexus_5_API_29 -writable-system (do not close terminal) (open a new terminal)
adb root
adb remount
copy mac host file to Downloads from /private/etc/hosts
adb push Downloads/hosts /system/etc/hosts
adb reboot
繁琐但有效,您可以在模拟器中逐行构建一个新的主机文件 shell。
重新安装模拟器
您可以在 PC/Mac/linux 命令行/powershell/终端中 edit/remount 您的模拟器(以获得可写文件系统)。
(如果模拟器已经 运行ning,请停止模拟器,然后...):
emulator -avd <avdname> -writable-system
(这会启动一个带有可写文件系统的新模拟器)
仍在您的 PC/Mac/Linux 终端中 运行 这两个命令:
adb root
adb remount
然后通过 shell:
连接到您的 运行ning 模拟器
adb shell
下面这部分 运行 来自您的模拟器内部,在您刚刚建立的 shell 连接内。
给自己root权限:
su
将目录更改为保存 hosts
文件的目录:
cd /etc
要让您的模拟器遵从开发机器的主机文件或给定域的 DNS,请使用 10.0.2.2
.
的 ip 添加域条目
将新域条目行附加到模拟器主机文件的示例:
echo '10.0.2.2 mydev.domain.com' >> hosts
此 10.0.2.2
是 Android 模拟器的特殊地址。它将将该域的 DNS 请求代理到您的开发机器。因此,无论您的 PC/Mac/Linux 机器托管 mydev.domain.com 文件列表的 IP 地址是什么,Android 模拟器都会使用它。
您现在可以退出 root shell 和您的模拟器 shell:
exit
exit
(第一次让你退出 su
。第二次退出模拟器 shell,让你回到开发机器的终端)。
大功告成。您可以在模拟器中打开网络浏览器,在地址栏中输入刚刚添加到主机的域,然后检查模拟器是否正确路由该域。
Remount failed
如果您使用的是 Android 模拟器 29+ 并获得
remount failed
调用 adb remount
时,查看 。
以下是我在 Windows 机器上的 Windows 终端上执行的步骤:
运行 以下命令可了解您的 AVD:
emulator -list-avds
运行以下命令打开模拟器为可写模式:
emulator -avd Pixel_XL_API_29 -writable-system -no-snapshot-load
将 Pixel_XL_API_29 替换为您的 AVD 名称。
忽略那里的警告。
在新的终端选项卡中 运行 以下命令:
- adb root
- adb shell avbctl 禁用验证
- adb 重启
等待您的模拟器重新启动。最多可能需要 1 分钟。
当模拟器重新启动时,运行以下命令:
- adb root
- adb 重新挂载
之后您将收到重新安装成功的消息:
现在是时候将我们的主机文件从 Windows 机器推送到 Android 的模拟器
adb push D:\hosts /system/etc/
D:\hosts 是我 Windows 机器的 D 驱动器中主机文件的位置。
/system/etc/ 是 Android 模拟器中我们要复制该文件的位置。
操作成功后您会看到如下信息:
要验证主机文件是否已推送,您可以运行以下命令:
- 亚行shell
- cd系统
- 光盘等
- 猫主机
您将在终端中看到主机文件的内容:
首先找到你的系统hosts文件,复制到桌面
然后用系统映像Nougat x86_64 Android 7.1.1(非Google API版本)创建一个虚拟设备Nexus 5已创建
然后在终端中转到 /Android/sdk/emulator 然后 运行 下面的代码请在下面添加你自己的设备名称,因为我的是 Nexus_S_API_25 =>
- ./emulator -writable-system -netdelay none -netspeed full -avd Nexus_S_API_25
- 之后打开一个新的终端并转到这个位置
/Android/sdk/platform-tools
- 然后 运行
- ./adb root
- ./adb remount
- ./adb push ~/Desktop/hosts /system/etc/hosts -(它将复制您的 Desktop/hosts 文件并将其粘贴到您的模拟器主机文件中,即 /system/etc/hosts)
- 就是这样,您的模拟器主机文件已更新现在,如果您想重新检查 运行 下面的代码
- ./adb shell
- cat /system/etc/hosts(它会显示模拟器主机文件)
- 重新启动模拟器以查看更改
- ./adb reboot
解决这个问题的另一种方法是使用 adb 命令行工具。
- 确保路径 emulator 和 tools
export ANDROID_HOME="/Users/YOUR_USERNAME/Library/Android/sdk"
export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$PATH
编辑: 对于 Windows 应该是这样的(而不是工具所需的平台工具 [或 adb[=47= 的路径]居住])
C:\Users\YOUR_USERNAME\AppData\Local\Android\sdk\platform-tools
C:\Users\YOUR_USERNAME\AppData\Local\Android\sdk\emulator
- 检查设备名称(最好是没有空格的短名称,例如 API30X86)
emulator -list-avds
- 然后使用以下参数启动模拟器:
emulator -avd YOUR_AVD_NAME -writable-system -no-snapshot-load -no-cache
- 运行以下命令运行作为root和重新挂载分区系统作为root
adb devices #you should see your devices
adb root
adb shell avbctl disable-verification
adb reboot
adb root
adb remount
- 重新挂载后,您应该可以将编辑后的主机文件从您的机器推送到模拟器。
adb push ~/Documents/hostsandroid /etc/hosts
现在您应该可以使用 Android Studio 中的 Device File Explorer 查看您的 hosts 文件。
编辑:在这种情况下,您没有看到设备文件资源管理器,如果检测到 Android 框架,您可以检查事件日志。如果是这样,请单击“配置”,然后您就完成了。
当您要再次 运行 并使用新会话推送新更改时,您只需要做:
adb root
adb remount
adb push ~/Documents/hostsandroid /etc/hosts
有人知道如何在 nougat 的 android studio 模拟器 运行 中编辑 /etc/hosts 文件吗?我将对其进行编辑,以便可以在我的本地 Web 服务器中使用我的虚拟主机。我尝试使用 adb 通过终端编辑它,但是它返回只读文件系统。也尝试使用 chmod 但仍然失败。
更新: 我还尝试使用 adb 拉取和推送文件 $ ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts
adb:错误:无法将“/Users/Christian/Desktop/hosts”复制到“/system/etc/hosts”:无法创建文件:只读文件系统
您可以使用 ADB Shell 通过更改访问权限(只读到 RW)来编辑文件
我能够通过使用 -writable-system 启动模拟器并使用 adb remount 重新安装模拟器来编辑 /etc/hosts 文件。之后,模拟器内的主机文件是可编辑的。我尝试 pushing/replacing 文件并成功。
这是我在 OSX 上的工作方式。在阅读了一堆不同的说明之后,似乎没有什么对我有用,直到有人提到你有一个非常狭窄的 window 用于将文件从你的磁盘复制到模拟设备或者它再次变为只读
- 启动模拟器。
- 在您的终端中为您的设备找到文件夹 "platform-tools"
- 准备要复制到设备的主机文件(在我的例子中,我把它放在桌面上)
- 把一堆命令串起来快速复制文件。这对我有用
./adb root && ./adb -s emulator-5554 remount && ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts
'emulator-5554' 是我的设备名称,您可以通过键入./adb devices
找到它
之后终端响应
restarting adbd as root
remount succeeded
[100%] /system/etc/hosts
您可以通过 ./adb shell
和 cat /system/etc/hosts
然后我可以从模拟设备连接到我的虚拟主机
为了完整起见,我的主机文件看起来像这样
10.0.2.2 my-virtual-host
我希望这对某人有所帮助,因为我花了很多时间试图解决这个问题。
遵循以下 3 个步骤:
- 以可写模式启动模拟器:
./emulator -avd <emulator_name> -writable-system
- 重新挂载:
adb remount
- 推送主机文件 attached :
adb push hosts /system/etc/
注:
- 运行 一个并且只有一个 emulator_name 上面的步骤
- 可执行文件
emulator
位于 android-sdk 中。对我来说是sdk/emulator
. - 附加的主机文件会将
www.facebook.com
解析为 127.0.0.1,因此会在模拟器上阻止www.facebook.com
。
1) android-sdk-macosx/tools/emulator -avd <avdname> -writable-system
2) ./adb root
3) ./adb remount
4) ./adb push <local>/hosts /etc/hosts
Android 文件主机可以是
/etc/hosts <--- This worked for me
/etc/system/hosts
/system/etc/hosts
检查
1) ./adb shell
2) cat /etc/hosts
3) ping customsite.com
尝试@P.O.W回答,
确保在主机文件的最后一个条目之后有一个空行 如果在主机文件中使用制表符,请将其替换为空格 重新启动 Android 并重试:
adb reboot
循序渐进
- 不要用 Google 播放图像创建 AVD。
- 例如使用 Google API Intel x86 Atom System Image。
使用以下命令启动模拟器...
emulator.exe –avd <avd name> -writable-system
例如:
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'
根目录并重新挂载 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 #
place all these export in z shell using terminal
vim ~/.zshrc press enter
then zshell will open
then press i
past all the export (verify the path i have used all default location for instalation)
then press esc
then press this :wq!
press enter
close terminal and open it again
export PATH="$PATH:$HOME/Dev/flutter/bin"
export GEM_HOME=$HOME/.gem
export PATH=$GEM_HOME/bin:$PATH
export ANDROID_HOME=$HOME/Library/Android/sdk
export ANDROID_SDK_ROOT=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
only use google apis image do not usese play image
u will get list of avds
emulator -list-avds
emulator -avd Nexus_5_API_29 -writable-system (do not close terminal) (open a new terminal)
adb root
adb remount
copy mac host file to Downloads from /private/etc/hosts
adb push Downloads/hosts /system/etc/hosts
adb reboot
繁琐但有效,您可以在模拟器中逐行构建一个新的主机文件 shell。
重新安装模拟器
您可以在 PC/Mac/linux 命令行/powershell/终端中 edit/remount 您的模拟器(以获得可写文件系统)。
(如果模拟器已经 运行ning,请停止模拟器,然后...):
emulator -avd <avdname> -writable-system
(这会启动一个带有可写文件系统的新模拟器)
仍在您的 PC/Mac/Linux 终端中 运行 这两个命令:
adb root
adb remount
然后通过 shell:
连接到您的 运行ning 模拟器adb shell
下面这部分 运行 来自您的模拟器内部,在您刚刚建立的 shell 连接内。
给自己root权限:
su
将目录更改为保存 hosts
文件的目录:
cd /etc
要让您的模拟器遵从开发机器的主机文件或给定域的 DNS,请使用 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 模拟器都会使用它。
您现在可以退出 root shell 和您的模拟器 shell:
exit
exit
(第一次让你退出 su
。第二次退出模拟器 shell,让你回到开发机器的终端)。
大功告成。您可以在模拟器中打开网络浏览器,在地址栏中输入刚刚添加到主机的域,然后检查模拟器是否正确路由该域。
Remount failed
如果您使用的是 Android 模拟器 29+ 并获得
remount failed
调用 adb remount
时,查看
以下是我在 Windows 机器上的 Windows 终端上执行的步骤: 运行 以下命令可了解您的 AVD:
emulator -list-avds
运行以下命令打开模拟器为可写模式:
emulator -avd Pixel_XL_API_29 -writable-system -no-snapshot-load
将 Pixel_XL_API_29 替换为您的 AVD 名称。
忽略那里的警告。
在新的终端选项卡中 运行 以下命令:
- adb root
- adb shell avbctl 禁用验证
- adb 重启
等待您的模拟器重新启动。最多可能需要 1 分钟。
当模拟器重新启动时,运行以下命令:
- adb root
- adb 重新挂载
之后您将收到重新安装成功的消息:
现在是时候将我们的主机文件从 Windows 机器推送到 Android 的模拟器
adb push D:\hosts /system/etc/
D:\hosts 是我 Windows 机器的 D 驱动器中主机文件的位置。 /system/etc/ 是 Android 模拟器中我们要复制该文件的位置。
操作成功后您会看到如下信息:
要验证主机文件是否已推送,您可以运行以下命令:
- 亚行shell
- cd系统
- 光盘等
- 猫主机
您将在终端中看到主机文件的内容:
首先找到你的系统hosts文件,复制到桌面
然后用系统映像Nougat x86_64 Android 7.1.1(非Google API版本)创建一个虚拟设备Nexus 5已创建
然后在终端中转到 /Android/sdk/emulator 然后 运行 下面的代码请在下面添加你自己的设备名称,因为我的是 Nexus_S_API_25 =>
- ./emulator -writable-system -netdelay none -netspeed full -avd Nexus_S_API_25
- 之后打开一个新的终端并转到这个位置 /Android/sdk/platform-tools
- 然后 运行
- ./adb root
- ./adb remount
- ./adb push ~/Desktop/hosts /system/etc/hosts -(它将复制您的 Desktop/hosts 文件并将其粘贴到您的模拟器主机文件中,即 /system/etc/hosts)
- 就是这样,您的模拟器主机文件已更新现在,如果您想重新检查 运行 下面的代码
- ./adb shell
- cat /system/etc/hosts(它会显示模拟器主机文件)
- 重新启动模拟器以查看更改
- ./adb reboot
解决这个问题的另一种方法是使用 adb 命令行工具。
- 确保路径 emulator 和 tools
export ANDROID_HOME="/Users/YOUR_USERNAME/Library/Android/sdk"
export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$PATH
编辑: 对于 Windows 应该是这样的(而不是工具所需的平台工具 [或 adb[=47= 的路径]居住])
C:\Users\YOUR_USERNAME\AppData\Local\Android\sdk\platform-tools
C:\Users\YOUR_USERNAME\AppData\Local\Android\sdk\emulator
- 检查设备名称(最好是没有空格的短名称,例如 API30X86)
emulator -list-avds
- 然后使用以下参数启动模拟器:
emulator -avd YOUR_AVD_NAME -writable-system -no-snapshot-load -no-cache
- 运行以下命令运行作为root和重新挂载分区系统作为root
adb devices #you should see your devices
adb root
adb shell avbctl disable-verification
adb reboot
adb root
adb remount
- 重新挂载后,您应该可以将编辑后的主机文件从您的机器推送到模拟器。
adb push ~/Documents/hostsandroid /etc/hosts
现在您应该可以使用 Android Studio 中的 Device File Explorer 查看您的 hosts 文件。
编辑:在这种情况下,您没有看到设备文件资源管理器,如果检测到 Android 框架,您可以检查事件日志。如果是这样,请单击“配置”,然后您就完成了。
当您要再次 运行 并使用新会话推送新更改时,您只需要做:
adb root
adb remount
adb push ~/Documents/hostsandroid /etc/hosts