在虚拟机中调试android 手机的方法

由于Google的源码是在ubuntu下编译的,Google官方提供了较为详细的编译说明,所以使用 了ubuntu 14.04 进行编译,编译完成后有一个问题,如何进行源码调试。(源代码在虚拟机中)

使用 virutalbox Extension Pack

首先的想法是直接使用中virutalBox 的USB 把手机给连到guest,折腾了一下比较麻烦, 首先需要安装virutalbox 的 Extension Pack,下载地址

http://download.virtualbox.org/virtualbox/5.1.18/Oracle_VM_VirtualBox_Extension_Pack-5.1.18-114002.vbox-extpack

管理->全局设定->扩展,选择下载的扩展包,安装。接下来这步很关键,上次就是这里没有搞定。

1
sudo usermod -a -G vboxusers <username>

执行命令后需要注销,重新登录。

VirtualBox 虚拟机设置 -> usb 添加需要接入 guest 的 usb 设备。

1
2
3
4
5
> lsudo lsusb  
Bus 001 Device 002: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

使用端口映射

后面想到adb 其实是通过tcp 和Android设备通讯, 所以只要做端口映射打个通道,就可以解决在virutalBox的虚拟机里调试手机的问题。

1
tcp        0      0 127.0.0.1:5037          0.0.0.0:*               LISTEN      26706/adb 

在guest里执行下面两条命令

1
2
autossh -nNL1234:localhost:1234  10.0.2.2 
autossh -nNL5037:localhost:5037 10.0.2.2

其中 10.0.2.2 是host的ip,5037 是adb 默认监听的端口,1234 是gdbserver 监听的端 口,利用ssh在host和guest 打个通道。

在host执行adb forward 命令

1
adb forward tcp:1234 tcp:1234 

这条命令在host和手机上建立了一条通道。

这样就搞定了adb的连接问题。执行这三行命令后在ubuntu下, adb devices 可以看到下面的输出, 问题得到解决。

1
2
3
4
> adb devices  
List of devices attached 01b00af93dc59e163 device

gdbclient system_server :1234 4475

输出正常,可以开始调试了。


在虚拟机中调试android 手机的方法
https://usmacd.com/cn/android_emulator_debug/
作者
henices
发布于
2017年3月24日
许可协议