如何Root Android Studio AVD

第一篇文章, 由于工作需要用到Android虚拟机, 但是在Mac OS 14上的Genymotion速度奇慢无比, 相比Android AVD速度却惊人的快. 因此才想着如何root掉Android原声AVD, 虽然网上教程很多, 自己也稍微整理了下.

做前

准备工具

  1. 首先准备好以下软件

  2. SR5-SuperSU-v2.82-SR5-20171001224502.zip

    1
    MD5: 8755c94775431f20bd8de368a2c7a179

    下载 官网 MY MEGA Cloud Drive

  3. eu.chainfire.supersu_v282.apk

    1
    MD5: 6475e8ec2b286be78ab1d10cae466e40(v2.82)

    下载 官网 Google Play Store MY MEGA Cloud Drive

  4. 安装好Android Studio, 并且配置好SDK的环境, 并且能在Terminal中能输入emulator时有有效的运行方式

1
emulator的bin在${Android_SDK}/tools中
  1. 已经准备好一个AVD, 并且能启动, 能到主界面, 这里用Android5.1_x86_64
    AVD

AVD

准备步骤

  1. 首先关闭虚拟机, 记住需要root的名字, 例如我这里是RuterDevice API 22, 它的名字是RuterDevice_API_22, 打开Terminal

AVD

  1. 输入 emulator -avd {替换成你的名字} -writable-system, 如果这一步能直接打开虚拟机, 那就跳到开始Root步骤
1
$ emulator -avd RuterDevice_API_22 -writable-system
  1. 这里可能出现如情况

  2. 找不到这个虚拟机, 返回如下的情况

    1
    2
    3
    4
    PANIC: Unknown AVD name [RuterDevice_API_22], use -list-avds to see valid list.
    ANDROID_AVD_HOME is defined but could not find RuterDevice_API_22.ini file in $ANDROID_AVD_HOME
    (Note: avd is searched in the order of $ANDROID_AVD_HOME,$ANDROID_SDK_HOME/.android/avd and $HOME/.android/avd)
    localhost:~ ruter$
1. 此时表示环境变量没有配置成功, 首先打开Android Studio3, 然后点击那个虚拟机右边的箭头, 点击ViewDetails
![img](//file.ruterfu.com/oss/image/2019/01/16/emWfQxoHMimORBGCYO/ZnSdreATJNgwRSCZ-medium.jpg)
2. 弹出如下的窗口, 记住那个Path, 只需要记到/avd的位置
![img](//file.ruterfu.com/oss/image/2019/01/16/xmbVVZrpjYQuQSTgRe/QuJWhqzFOZWTFqWl-medium.jpg) 
3. 然后, 编辑 ~/.bash_profile, 增加以下内容, 保存并退出
    
    
1
2
3
4
5
6
7
8
$ vi ~/.bash_profile

增加以下内容

export ANDROID_AVD_HOME=/Users/ruter/.android/avd

保存退出, 然后
source ~/.bash_profile
  1. 找不到emulator/lib64/qt/lib
1
2
3
4
5
6
7
8
9
这个情况下, 切换到${Android SDK目录}/emulator下即可, 
然后再次运行
emulator -avd {你的虚拟机名字} -writable-system

出现如下信息即表示成功

emulator: WARNING: System image is writable
emulator: WARNING: encryption is off
WARNING: HAXM 6.0.3 is installed. Please install HAXM >= 6.2.1 to fix compatibility issues on Mac.
  1. 然后会弹出Android AVD的窗口,
  2. Command + N 新开一个窗口, 输入adb devices如果看到设备即准备步骤结束
1
2
List of devices attached
emulator-5554 device

开始Root

  1. 首先, 安装上面工具中的 eu.chainfire.supersu_v282.apk
1
2
3
4
$ adb -e install  eu.chainfire.supersu_v282.apk 
eu.chainfire.supersu_v282.apk: 1 file .... 100.6 MB/s (6201401 bytes in 0.059s)
pkg: /data/local/tmp/eu.chainfire.supersu_v282.apk
Success
  1. 解压上面工具中的 SuperSU-v2.82-201705271822.zip, 内部文件如下所示

    img

  2. 将su.pie复制到系统中

1
$ adb -e push SuperSU-v2.82-201705271822/x64/su /system/xbin/su
  可能出现如下问题
  
1
2
adb: error: failed to copy 'SuperSU-v2.82-201705271822/x64/su' to '/system/xbin/su': remote Read-only file system
SuperSU-v2.82-201705271822/x64/su:...ed. 44.1 MB/s (100664 bytes in 0.002s)
此时需要运行 adb root, adb remount
1
2
3
4
$ adb root
adbd is already running as root
$ adb remount
remount succeeded
再次运行上面的命令
1
2
$ adb -e push SuperSU-v2.82-201705271822/x64/su /system/xbin/su
SuperSU-v2.82-201705271822/x64/su:...ed. 21.3 MB/s (100664 bytes in 0.005s)
  1. 权限更改和生效

  2. 运行 adb -e shell 进入虚拟机的shell环境

  3. 运行 su root 切换到root用户

  4. 运行 cd /system/xbin 跳到/system/xbin目录下

  5. 运行 chmod 06755 su 更改权限

    1
    2
    3
    4
    5
    $ adb -e shell
    [email protected]_x86_64:/ # su root
    [email protected]_x86_64:/ # cd /system/xbin
    [email protected]_x86_64:/system/xbin # chmod 06755 su
    [email protected]_x86_64:/system/xbin #
  6. 初始化 su

  7. 运行 su --install 安装su

  8. 运行 su --daemon& 运行守护进程

    1
    2
    3
    [email protected]_x86_64:/system/xbin # su --install
    [email protected]_x86_64:/system/xbin # su --daemon&
    [1] 3656
  9. 打开SuperSU 的app, 此时可能会要求更新, 选择更新然后选择Normal即可, 大约等待1-2分钟, 更新即完成, 点击Reboot即可.

    img

  10. Reboot后, 可以安装一个RootExplore来查看root效果, 可以发现, 已经root完成了

    img

  11. 之后如果需要使用root版的avd, 按照上面的 emulator -avd {avd名} -writable-system来启动.