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

时间:2016-12-13 09:37:14

标签: android android-studio android-emulator

任何人都知道如何编辑在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':无法创建文件:只读文件系统

12 个答案:

答案 0 :(得分:48)

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

答案 1 :(得分:11)

以下是我在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
  5. 找到该名称

    之后终端回复

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

    您可以通过./adb shell然后cat /system/etc/hosts

    成功复制该副本

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

    这里要完整的是我的主机文件看起来像 10.0.2.2 my-virtual-host

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

答案 2 :(得分:8)

分步

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

    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'
  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 #
    

答案 3 :(得分:5)

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

答案 4 :(得分:5)

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

emulator -list-avds

enter image description here

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

emulator -avd Pixel_XL_API_29 -writable-system -no-snapshot-load

将 Pixel_XL_API_29 替换为您的 AVD 名称。

enter image description here

忽略那里的警告。

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

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

enter image description here

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

enter image description here

当模拟器重新启动时,运行以下命令:

  • adb 根
  • adb 重新挂载

之后您将收到重新挂载成功的消息:

enter image description here

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

adb push D:\hosts /system/etc/

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

成功操作后,您将看到如下消息: enter image description here

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

  • adb 外壳
  • 光盘系统
  • 光盘等
  • 猫主人

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

enter image description here

答案 5 :(得分:3)

按照以下3个步骤进行操作:

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

    1. 使用上述步骤
    2. 运行一个且仅一个emulator_name
    3. 可执行文件emulator位于android-sdk中。对我而言,它位于sdk/emulator
    4. 之下
    5. 附加主机文件将www.facebook.com解析为127.0.0.1,因此会在模拟器上阻止www.facebook.com

答案 6 :(得分:3)

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

  1. 确保你有模拟器工具
export ANDROID_HOME="/Users/YOUR_USERNAME/Library/Android/sdk"
export PATH=$ANDROID_HOME/emulator:$ANDROID_HOME/tools:$PATH

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

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

现在,您应该可以通过 Android Studio 中的设备文件资源管理器查看您的 hosts 文件。
编辑:在这种情况下,您没有看到设备文件资源管理器,如果检测到 Android 框架,您可以检查事件日志。如果是这样,请单击“配置”,您就完成了。 enter image description here


当您要再次运行并使用新会话推送新更改时,您只需执行以下操作:
adb root
adb remount 
adb push ~/Documents/hostsandroid /etc/hosts

答案 7 :(得分:2)

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

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

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

  • ./emulator -writable-system -netdelay none -n​​etspeed full -avd Nexus_S_API_25
  1. 之后打开一个新终端并转到这个位置 /Android/sdk/platform-tools
  • 然后运行
  • ./adb 根
  • ./adb 重新挂载
  • ./adb push ~/Desktop/hosts /system/etc/hosts -(它将复制您的桌面/主机文件并将其粘贴到您的模拟器主机文件中,即 /system/etc/hosts)
  1. 就是这样,您的模拟器主机文件已更新,现在如果您想重新检查,请运行以下代码
  • ./adb 外壳
  • cat /system/etc/hosts(它会显示模拟器主机文件)
  1. 重新启动模拟器以查看更改
  • ./adb 重启

答案 8 :(得分:1)

您可以通过更改访问权限(只读为RW)来使用ADB Shell编辑文件

答案 9 :(得分:0)

尝试@ P.O.W答案,

确保在主机文件的最后一个条目之后有一个空白行 如果在主机文件中使用选项卡,请用空格替换它们 重新启动Android,然后重试:

adb reboot

答案 10 :(得分:0)

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

您可以在PC或Mac命令行/ powershell /终端中编辑/重新安装模拟器(以获得可写文件系统)(如果模拟器已经在运行,请停止模拟器,然后...):

emulator -avd <avdname> -writable-system

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

adb root

adb remount

然后启动仿真器外壳程序:

adb shell

现在您位于模拟器中。授予自己root访问权限:

su

进入主机目录:

cd /etc

也许是备份主机文件的好时机:

cp hosts hosts.bak

然后使用以下命令逐行构建一个新的主机文件(在临时文件hosts2中):

echo '127.0.0.1 localhost' >> hosts2

echo '::1 ip6-localhost' >> hosts2

echo '192.168.1.xxx my.localdomain.com' >> hosts2

然后将您的hosts2文件重命名为主机:

mv hosts2 hosts

答案 11 :(得分:-1)

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