https://android.stackexchange.com/questions/171442/root-android-virtual-device-with-android-7-1-1/176400#176400
I’m pleased to inform the community of an easier way to root android emulator (run from standalone Android SDK)
Requirements:
SuperSU app (chainfire) latest version 2.82 // 稍后把2.79的资源包放上来
Recovery flashable.zip (contains su binary) (Here is alternative mirror link for flashable zip if the main link is not working : Flashable zip super su 2.82 for all roms)
Note: SuperSU is now deprecated, but this method still works to root the emulator, and more updates will be given for newer rooting methods.
Instructions
Install the SuperSu.apk
Install the SuperSu app firstly, just do drag and drop (if running latest emulator version or sideload through adb i.e adb –e install supersu.apk
) //最简单的就是把apk文件直接拖拽进去安装
After installing it, when you run it shows a screen as shown below indicating “There is no SU binary installed..”. This error just confirms the device is not yet rooted.
Make emulator’ system partition writable
As it suggests, we need to give the emulator permission to write system files.
Type the following code to accomplish this: emulator.exe –avd {emulator_name} –writable-system
Note: Navigate to the tools folder where Android SDK is installed and open command prompt there by pressing shift and right clicking. //进入到Android SDK的tools文件夹,空白地方shift+右击即可打开cmd窗口
Pushing su binary in system directory
Important! Only use the su binary that matches your avd architecture e.g x86, arm etc.., and note the path where you extracted these binaries.
adb root
adb remount
Now its time to push the su binary:
This is the code I successfully used: adb -e push C:\%USERPROFILE%\Desktop\rootemu\x86\su.pie /system/bin/su
(nevermind about my specific location of su binary, any location is okay as long there is no white space)
If this fails try this pushing to this directory instead /system/xbin/su
. Also for emulators running android 5.1 and below use the su
and not su.pie
Change permissions of the su binary
adb –e shell su root cd /system/bin chmod 06755 su
Important!! Take note of su binary path (mine is /system/bin)
install
directive on su binary and set a daemon
Type the codes:
su --install
and for setting up daemon:
su --daemon&
Important!! Take note of spacing
Setting SELinux to Permissive(i.e turning off SE Linux)
setenforce 0
That’s pretty much it!! Open SuperSU app and it may ask to update binaries, you can use Normal method.
Open any app requiring SU permissions just to double check and indeed SuperSU ask if you wish to grant it su permissions.
Remarks
Most content in reference was for older android versions and hence the reason for different commands and paths which I modified.
Special acknowledgements;
Special gratitude to Irvin H, whose tutorial inspired me to create this guide after myself having failed countless times, and also after seeing the need for many users to root their emulators too. I hope this will also benefit a lot
Irvin H: Rooting the android emulator –on Android Studio 2.3((Android 4.4)
As commented by SaAtomic,
This approach is still viable with Android Studio 3.0.1
After upgrading to emulator version 27.2.9
and above it now makes preserving root much easier through snapshot feature (if copying the system.img method isn't working):
Ideally it is more like hibernating the virtual device with config intact, hence everything is preserved.
Snapshots
You can now save multiple AVD snapshots for a given device configuration and choose which of the saved snapshots to load when you start the emulator. Starting a virtual device by loading a snapshot is much like waking a physical from a sleep state, as opposed to booting it from a powered-off state.
This implies the only requirement to start the emulator is adding the -writable-system
parameter to the normal emulator -avd [avdname]
command to start the emulator. (Running the emulator just with emulator -avd [avdname] doesn't launch the rooted version/copy or may lead to some error)
Tested on API level 22