要用网络调试Android需要设备已经获取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   

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:

    public void excuteStartShell() {        String[] commands = new String[] {                 "setprop service.adb.tcp.port 5555",// 设置监听的端口,端口可以自定义,如5554,5555是默认的                "stop adbd",// 关闭adbd                "start adbd",// 重新启动adbd        };        try {            List<String> temp = RootTools.sendShell(commands, 10, 3000);            for (int i = 0; i < temp.size(); i++) {                Log.i(TAG, "__This is result from root:__" + temp.get(i));            }        } catch (Exception e) {            e.printStackTrace();        }    }    public void excuteStopShell() {        String[] commands = new String[] {                "setprop service.adb.tcp.port -1",// 设置监听的端口,端口可以自定义,如5554,5555是默认的                "stop adbd",// 关闭adbd                "start adbd",// 重新启动adbd        };        try {            List<String> temp = RootTools.sendShell(commands, 10, 3000);            for (int i = 0; i < temp.size(); i++) {                Log.i(TAG, "__This is result from root:__" + temp.get(i));            }        } catch (Exception e) {            e.printStackTrace();        }    }

通过网络使用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行:

 /* for the device, start the usb transport if the        ** android usb device exists and "service.adb.tcp"        ** is not set, otherwise start the network transport.        */    property_get("service.adb.tcp.port", value, "0");    if (sscanf(value, "%d", &port) == 1 && port > 0) {        // listen on TCP port specified by service.adb.tcp.port property        local_init(port);    } else if (access("/dev/android_adb", F_OK) == 0) {        // listen on USB        usb_init();    } else {        // listen on default port        local_init(ADB_LOCAL_TRANSPORT_PORT);    }

分析上述代码可以发现,在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

adb同时支持USB和TCP调试

最近要调试otg功能,usb被占用,只能用无线adb来调试。

无线刷机不方便,网上下载的无线adb经常需要root,并且有写无线adb无法使用,push apk比较麻烦。

附上修改的代码,同时支持USB和tcp调试,不用每次刷机后push apk。

修改点两个: 1.在build\tools\buildinfo.sh添加 echo"service.adb.tcp.port=5555"打开无线adb连接 (也可以在system/build.prop里面直接添加 service.adb.tcp.port=5555) 2.在system\core\adb\adb.c里面将usbadb和无线adb监听修改下判断,完了变下boot就可以了 改前
property_get("service.adb.tcp.port",value, "0");if(sscanf(value, "%d", &port) == 1 && port > 0) {  // listen on TCP port specified byservice.adb.tcp.port property        local_init(port);    } else if(access("/dev/android_adb", F_OK) == 0) {        // listen on USB        usb_init();    } else {        // listen on default port        local_init(ADB_LOCAL_TRANSPORT_PORT);}

修改后

property_get("service.adb.tcp.port", value, "0");    if (sscanf(value, "%d",&port) == 1 && port > 0) {       // listen on TCP port specified byservice.adb.tcp.port property        local_init(port);    }         if (access("/dev/android_adb",F_OK) == 0) {       // listen on USB        usb_init();    } else {       // listen on default port        local_init(ADB_LOCAL_TRANSPORT_PORT);    }

要两个一起修改,不然修改了第一点USB就不能用了。

更多相关文章

  1. Android(安卓)Wifi P2P 入门
  2. 关于android上dpi/screen-size的厘清解释
  3. linux android V4l2 的一些精品文章连接
  4. Android(安卓)Service判断设备联网状态详解
  5. Android(安卓)CTS 4.03测试总结
  6. Android客户端连接tomcat时出错:connect failed: ECONNREFUSED (C
  7. android自动连接wifi——WifiManager
  8. Android(安卓)Mqtt
  9. Ubuntu18.04配置ADB调试环境

随机推荐

  1. Android中文API(138) —— RemoteViews
  2. Android 4.0 SDK 已可下载
  3. android经典开源代码集合
  4. Android Google Map应用开发详解
  5. Android架构组件-Navigation的使用(一)
  6. Android:FlexboxLayout你值得拥有的流布
  7. Kivy A to Z -- Android apk的生成过程
  8. android中widgets的简单实现
  9. Android中文API(134) —— Account
  10. 【转】Android(安卓)动画框架详解,第 1 部