可用wifi、网口。
1.先要获取root权限
$su
#stop adbd
#setprop service.adb.tcp.port 5555
#start adbd
然后在电脑端cmd中输入adb命令:
adb connect <手机ip地址(端口默认是5555)>
这时手机已经和电脑连上了,用adb devices看看有没有连上手机,
如果没有就adb kill-server后重新connect
可以直接用eclipse中的DDMS窗口对手机进行调试
如果需要进入adb shell,直接在命令行输入adb shell
$su
#stop adbd
#setprop service.adb.tcp.port 0
#start adbd
2.Android手机WiFi调试,查看logcat
在项目开发过程中,遇到这样的场景: 有写特殊Android设备只有一个USB口,当挂载U盘之后就无法连接USB实时进行调试了。这儿时候如果设备可以开启WiFi,那就可以用WiFi进行调试; 要开启网络调试,执行下面指令即可:
$su
#stop adbd
#setprop service.adb.tcp.port 5555
#start adbd
上面完成之后就可以用adb命令:
adb connect 192.168.1.xx//Android设备的ip地址;
上述在设备连接电脑执行cmd时在 "stop adbd",// 关闭adbd 这一步会有问题,执行之后USB就断开了,无法执行接下来的打开指令; 那怎么办呢? 想到直接做一个apk,安装在手机上执行,于是就有了下面的apk:
1 public void excuteStartShell() {
2 String[] commands = new String[] {
3 "setprop service.adb.tcp.port 5555",// 设置监听的端口,端口可以自定义,如5554,5555是默认的
4 "stop adbd",// 关闭adbd
5 "start adbd",// 重新启动adbd
6 };
7 try {
8 List<String> temp = RootTools.sendShell(commands, 10, 3000);
9 for (int i = 0; i < temp.size(); i++) {
10 Log.i(TAG, "__This is result from root:__" + temp.get(i));
11 }
12 } catch (Exception e) {
13 e.printStackTrace();
14 }
15 }
16
17 public void excuteStopShell() {
18 String[] commands = new String[] {
19 "setprop service.adb.tcp.port -1",// 设置监听的端口,端口可以自定义,如5554,5555是默认的
20 "stop adbd",// 关闭adbd
21 "start adbd",// 重新启动adbd
22 };
23 try {
24 List<String> temp = RootTools.sendShell(commands, 10, 3000);
25 for (int i = 0; i < temp.size(); i++) {
26 Log.i(TAG, "__This is result from root:__" + temp.get(i));
27 }
28 } catch (Exception e) {
29 e.printStackTrace();
30 }
31 }
3.通过网络使用adb
在adb的说明文档中提到:
“An ADB transport models a connection between the ADB server and one device or emulator. There are currently two kinds of transports: - USB transports, for physical devices through USB - Local transports, for emulators running on the host, connected to the server through TCP”
大意是说,在物理设备上,adb是通过USB连接到设备上的,而在模拟器上,adb是通过TCP协议连接到设备上的。
实际上在物理设备上,也可以让adb通过TCP协议来连接设备(当然前提条件是你的设备要有网口)。
首先看一下下面这段源代码,出自system/core/adb/adb.c,第921行:
1 /* for the device, start the usb transport if the
2 ** android usb device exists and "service.adb.tcp"
3 ** is not set, otherwise start the network transport.
4 */
5 property_get("service.adb.tcp.port", value, "0");
6 if (sscanf(value, "%d", &port) == 1 && port > 0) {
7 // listen on TCP port specified by service.adb.tcp.port property
8 local_init(port);
9 } else if (access("/dev/android_adb", F_OK) == 0) {
10 // listen on USB
11 usb_init();
12 } else {
13 // listen on default port
14 local_init(ADB_LOCAL_TRANSPORT_PORT);
15 }
分析上述代码可以发现,在adbd启动时首先检查是否设置了service.adb.tcp.port,
如果设置了,就是使用TCP作为连接方式;
如果没设置,就去检查是否有adb的USB设备(dev/android_adb),如果有就用USB作为连接方式;
如果没有USB设备,则还是用TCP作为连接方式。
因此只需要在启动adbd之前设置service.adb.tcp.port,就可以让adbd选则TCP模式,
也就可以通过网络来连接adb了。
这需要修改init.rc文件。如果不想修改,也可以在系统启动之后,在控制台上执行下列命令:
#stop adbd
#set service.adb.tcp.port 5555
#start adbd
这样就可以在主机上通过下列命令来连接设备了:
adb connetc <ip-of-device>:5555
4.adb同时支持USB和TCP调试
最近要调试otg功能,usb被占用,只能用无线adb来调试。
无线刷机不方便,网上下载的无线adb经常需要root,并且有写无线adb无法使用,push apk比较麻烦。
附上修改的代码,同时支持USB和tcp调试,不用每次刷机后push apk。
修改点两个:
- 在build\tools\buildinfo.sh添加
echo"service.adb.tcp.port=5555"打开无线adb连接
也可以在system/build.prop里面直接添加service.adb.tcp.port=5555
- 在system\core\adb\adb.c里面将usbadb和无线adb监听修改下判断,完了变下boot就可以了
1 property_get("service.adb.tcp.port",value, "0");
2 if(sscanf(value, "%d", &port) == 1 && port > 0) {
3 // listen on TCP port specified byservice.adb.tcp.port property
4 local_init(port);
5 } else if(access("/dev/android_adb", F_OK) == 0) {
6 // listen on USB
7 usb_init();
8 } else {
9 // listen on default port
10 local_init(ADB_LOCAL_TRANSPORT_PORT);
11 }
修改后
1 property_get("service.adb.tcp.port", value, "0");
2 if (sscanf(value, "%d",&port) == 1 && port > 0) {
3 // listen on TCP port specified byservice.adb.tcp.port property
4 local_init(port);
5 }
6
7 if (access("/dev/android_adb",F_OK) == 0) {
8 // listen on USB
9 usb_init();
10 } else {
11 // listen on default port
12 local_init(ADB_LOCAL_TRANSPORT_PORT);
13 }
要两个一起修改,不然修改了第一点USB就不能用了。