[Miscellaneous Android Development] Efreak2004:
I can't find much of any information on hacking the microsoft android emulator. Ideally, I'd like to get it working with superuser, exposed, etc, so it can be a fully functional way to see how android itself and apps work in different environments, all from my desktop. Also, I can just play around with stuff that I wouldn't touch on my tablet for fear of bricking it. I like playing with things.

Disclaimer: I'm not interested in maintaining anything, but as mentioned above, I can't find any information. Therefore, I'm simply posting what information I have here, in the hopes it will interest someone else enough to take a harder look at it. My original post was over here, but I've expanded beyond simply adding supersu to the image.

Things I can't do:

- Install superuser

- Install Xposed

- Install Google Play for anything more recent than KitKat

- Install recovery scripts

Things I can do:

- Run commands as root.

- Install Google Play Services on KitKat

- Change the screen resolution

- Change the amount of internal disk space

- Change the amount of memory and cpu cores available.

- Install busybox

- Flash simple scripts that don't require recent versions of cwm/twrp/other modern recovery.

----------------------------------------

Background information: The Microsoft Android "Emulator" is actually a HyperV virtual machine. When you install it, it enables the HyperV virtualization service in windows*. The effect of this is that instead of running android by emulating an arm processor, it runs android natively, with far better performance, by using Microsoft's hypervisor that's built into windows (win8+). You can work with it with Visual Studio and with Android Studio, but I don't use either much, so I can't help you with that. You can download it from Visual Studio if you want to (VS 2015 is free), or you can download a standalone version. I don't know if there's a difference between the two.

* I'm not sure if it installs the HyperV GUI as well, as I already use HyperV for other things and had it already installed. If you need to do so, you can install the GUI by going to add-remove windows features in the control panel ('appwiz.cpl' from the control panel).

----------------------------------------

Modifying the properties of the emulated system.

Configuration file location: After you create a device, the .cfg file for it will be located in %localappdata%\Microsoft\VisualStudioEmulator\Android\Containers\Local\Devices

To change the resolution: So far, I haven't identified any supported resolutions other than those listed in the device profiles list. So far, supported resolutions that I've used successfully are 480x800, 720x1080. You can edit the .cfg file for the specific device that you want to change the resolution of, and change the `device.screen.resolution=` line to any supported (see previous) resolution.

To change the size of the internal storage, follow the instructions here. You'll need an ubuntu cd; minimal install cd is fine if you have slow internet/computer or low ram.

To change the amount of ram or processors allocated to the virtual machine: Open Hyper-V manager, right-click the appropriate VM and click settings.

- Change the ram allocation by clicking Memory in the list at left. I do not know what happens if you try using Dynamic Memory; if it works, it should be more memory-efficient, but I left that alone. Now update the `device.vm.ram.size=` line in the .cfg file.

- Change the cpu allocation by clicking the Processor field. Please note that if you have hyper-threading, you should only use half your logical processors as cpus; the hyperthreaded 'cores' won't work as well (according to information online; you can check number of logical processors in windows task manager's performance tab). Now update the 'device.vm.cpu.count=' line in the .cfg file

----------------------------------------

Info on "recovery" and "flashing" - Installing google play

So far, I have only managed to get Google Play Services working on KitKat. I can't get it to work on Lollipop or Marshmallow (and haven't tried earlier versions at all); the virtual machine does *not* have a recovery or fastboot because of the way it works, and I haven't figured out any way of installing such. Instead, there's a simple shell file called install_zip.sh. It does not work with modern flashable zips that require TWRP/CWM; it only works with the old style zip designed for a specific architecture. As such, opengapps flashable zips will not work.

To install Google Play Services on KitKat (4.4.4)

1. Inside the emulator, open the browser and go to http://www.teamandroid.com/gapps/ and download the file linked under Gapps CyanogenMod 11.

2. Open the window the the android VM from the Hyper-V Manager to get console access. If you have ADB installed locally, you can use that in the future, but getting the VM's shared IP requires terminal access anyways (run `ip addr` as root inside the emulator to get the list of IPs).

3. Run `adb shell` to get access to the root shell (yes, it's that easy).

4. Run `install_zip.sh /sdcard/Downloads/gapps-kk-20140105-signed.zip` (or whatever the name/path for the downloaded gapps file is).

5. It should complete successfully. Now type exit to exit the adb shell, and close the hyper-v console window (the android emulator will continue running).

6. Click the 'X' at the top right of the Emulator to shut down/close the VM

7. Start the emulator back up. You should now have access to Google Play Services.

----------------------------------------

Busybox

The emulator does not come with a preinstalled copy of busybox. It does come with the android toolbox, but this has only a very minimal amount of commands in it. The instructions below are for installing stericson's busybox.

1. Get a copy of stericson's busybox from somewhere--your personal device, etc, it doesn't matter. The easiest way is to either install it on a real android device and grab it with airdroid (or other), or to use a play store scanner to get it. The file name will probably be something like stericson.busybox.apk.

2. Rename it to .zip so you can access the contents.

3. Extract the busybox-x86.png file from the 'assets' folder inside the zip, and rename it to `busybox`.

4. In the Android Emulator, click the >> button for tools, and click the sdcard header. Choose a folder (a new one on your dekstop will do) and tell it to pull the contents of the sdcard to the folder.

5. Move the busybox file into the Download folder that you just pulled from the sdcard. If you created a folder for this, you can delete it now.

6. Back in the android emulator, push the folder structure back into the sdcard; this will move the busybox onto the emulator.

7. Open the HyperV console for the emulator or open a terminal app in the android emulator (installing it is up to you)

8. Run `adb shell` to get a root prompt.

9. Run `mount -o rw,remount /system` to remount the system partition as writable

10. Run `cp /sdcard/Download/busybox /system/xbin` to copy the busybox binary over

11. Run `chmod 777 /system/xbin/busybox` to make the busybox binary executable.

12. Run `busybox --install /system/xbin` to copy the busybox binary for all the included applets. I think the -s paramter will symlink the applets to the main binary instead, but I'm not sure.

13. Type exit in the adb shell.

14. You can now run busybox commands in the terminal, and use apps that require busybox to be installed.

Now that you have busybox installed, you can use unzip, etc.

----------------------------------------

Hacking the OS itself.

The android emulator uses a VHD file for the disks. I've mounted the vhd file inside an ubuntu server to play with, and discovered several things about the way it works. The first partition is the boot partition, it contains 3 files:

- kernel - the android/linux kernel

- ramdisk - the ramdisk for the root filesystem. gzipped cpio archive.

- cmdline - the kernel parameters(? not sure what to call this)

I've tried modifying the ramdisk to add the init files for the superuser, but this doesn't seem to work properly; when I boot up the vhd file, I can open the console with hyper-v manager (the android emulator machines show up there automatically), and when it gets to the ramdisk, it says so--then the caps/num/scroll lights start flashing and it hangs. I haven't gotten any further than that at this time.