Home » Android » How to edit /etc/hosts file in Android Studio emulator running in nougat?

How to edit /etc/hosts file in Android Studio emulator running in nougat?

Posted by: admin April 23, 2020 Leave a comment

Questions:

Anyone know how to edit /etc/hosts file inside an android studio emulator running in nougat? I will be editing it so I can use my virtual host in my local web server. I tried editing it through terminal using adb however, it is returning Read-only file system. Tried also using chmod but still it fails.

Update:
I also tried pulling and pushing files using adb
$ ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts

adb: error: failed to copy ‘/Users/Christian/Desktop/hosts’ to ‘/system/etc/hosts’: couldn’t create file: Read-only file system

How to&Answers:
1) android-sdk-macosx/tools/emulator -avd <avdname> -writable-system
2) ./adb root
3) ./adb remount
4) ./adb push <local>/hosts /etc/hosts

Android file host can be

/etc/hosts <--- This worked for me
/etc/system/hosts
/system/etc/hosts

Check

1) ./adb shell
2) cat /etc/hosts
3) ping customsite.com

Answer:

Here is how i was able to do it working on OSX. After reading a bunch of different instruction nothing seemd to work for me untill someone mentioned that you have a very narrow window for copying the file from your disk to the emulated device or it becomes read-only again

  1. Start your emulator.
  2. In your terminal find the folder “platform-tools” for your devices
  3. Prepare the hosts file you want to copy to your device (in my case i put it on desktop)
  4. String together a bunch of commands to copy the file quickly. This is what worked for me ./adb root && ./adb -s emulator-5554 remount && ./adb -s emulator-5554 push ~/Desktop/hosts /system/etc/hosts ’emulator-5554′ is the name of my device which you can find by typing ./adb devices

after that the terminal responded with

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

you can veryfy the copy was successfull by ./adb shell and then cat /system/etc/hosts

I was then able to connect to my virtual hosts from the emulated device

Just to be complete here is how my hosts file looked like
10.0.2.2 my-virtual-host

I hope this helps someone as i spet quite some time trying to figure this out.

Answer:

Step by Step

  1. Don’t Create the AVD with a Google Play image.
  2. Use for example Google APIs Intel x86 Atom System Image.
  3. Start the emulator with the following command…

    emulator.exe –avd <avd name> -writable-system
    

For example:

    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. Root and Remount the AVD like the followings…

    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 #
    

Answer:

I was able to edit the /etc/hosts file by launching the emulator with -writable-system and remounting the emulator using adb remount. After that the hosts file inside the emulator is editable. I tried pushing/replacing the file and succeeded.

Answer:

Follow the below 3 steps :

  1. Start emulator in writable mode : ./emulator -avd <emulator_name> -writable-system
  2. remount : adb remount
  3. push the hosts file attached : adb push hosts /system/etc/

Note :

  1. Run one and only one emulator_name with above steps
  2. executable emulator is located within android-sdk. For me it was under sdk/emulator.
  3. Attached hosts file will resolve www.facebook.com to 127.0.0.1, hence blocks www.facebook.com on emulator.

Answer:

You can use the ADB Shell to edit the file by changing the access (Read Only to RW)

Answer:

Try @P.O.W answer,

Make sure you have a blank line after the last entry of the hosts file
If you use tabs in the hosts file, replace them with spaces
Restart Android and try again:

adb reboot