转自: http://www.cnblogs.com/shangdawei/p/4480278.html  

  可用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:

     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, , );
for (int i = ; 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, , );
for (int i = ; i < temp.size(); i++) {
Log.i(TAG, "__This is result from root:__" + temp.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}

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行:

     /* 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, "");
if (sscanf(value, "%d", &port) == && port > ) {
// listen on TCP port specified by service.adb.tcp.port property
local_init(port);
} else if (access("/dev/android_adb", F_OK) == ) {
// 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

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就可以了
  改前

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

  修改后

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

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

 

usb被占用时,可以用这些方法进行adb无线调试的更多相关文章

  1. ADB WIFI无线调试真正摆脱usb数据线连接,一次也不用!

    常见的使用ADB无线调试步骤 手机"开发者模式"菜单中开启"USB调试" 和"无线调试",手机网络与电脑在同一网内; 手机使用USB与电脑进 ...

  2. USB移动硬盘WinPE启动盘的制作方法

    USB移动硬盘WinPE启动盘的制作方法 软件:老九WinPE 老毛桃终于撒手无论版 发行时间:2007年9月11日 制作发行:老毛桃 作用:当系统坏了,无法进入时,用来做系统维护,备份文件.轻巧稳定 ...

  3. 移动设备 小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法

    小米2S不显示CD驱动器(H),便携设备,MTP,驱动USB Driver,MI2感叹号的解决方法 by:授客 QQ:1033553122 用户环境 操作系统:Win7 手机设备:小米2S   问题描 ...

  4. usb设备运行不正常的解决方法(转)

    add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...

  5. 关于Linux服务器磁盘空间占满问题的解决方法

    下面给大家分享一篇关于Linux服务器磁盘占满问题解决方法(/dev/sda3 满了),需要的的朋友参考下吧   下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了), ...

  6. Android Studio关于USB device not found的解决的方法

    Android Studio关于USB device not found的解决的方法 我们使用Android Studio进行Android开发时.当我们使用真机进行调试时.非常可能会出现USB de ...

  7. Java学习-025-类名或方法名应用之一 -- 调试源码

    上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文 . 通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的 ...

  8. JVM CUP占用率过高排除方法,windows环境

    jdk自带的jvisualvm可以看到程序CPU使用率,但是无法确定具体的线程,想要确定到具体的线程需要借用到微软的Process Explorer 具体排除方法: 一:打开资源管理器,找到cup占用 ...

  9. win10系统磁盘占用率高的解决方法,占用100%的问题

    win10系统开机后明明什么都没做,磁盘占用率却只见飙升到了100%,出现这种情况是win10自带的服务导致的.下面的方法可以解决win10系统磁盘占用率高问题. 1.按下Win+R,然后输入serv ...

随机推荐

  1. HDU 2601An easy problem-素数的运用,暴力求解

    id=17433" target="_blank" style="color:blue; text-decoration:none">An ea ...

  2. C/C++语言中的位运算

    在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...

  3. 基于mqtt协议实现手机位置跟踪

    Mqtt协议是物联网领域的一个标准协议,具有轻巧,对设备,带宽要求低,可靠稳定的特点,适合用来实现手机定位跟踪功能. 目前我初步搭建起来了整个可运行的框架,大致为如下思路:1.手机端通过位置服务,获取 ...

  4. HBase在滴滴出行的应用场景和最佳实践

    摘要: 主要介绍了HBase和Phoenix在滴滴内部的一些典型案例.文章已在CSDN极客头条和<程序员>杂志发表,应朋友邀请,分享到云栖社区,希望给大家带来启发和帮助. 背景 对接业务类 ...

  5. 数据库连接池-配置 wallfilter

    使用缺省配置的WallFilter <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSou ...

  6. /dev下添加设备节点的方法步骤(通过device_create)

    将自己开发的内核代码加入到Linux内核中,需要3个步骤: 1.确定把自己开发代码放入到内核合适的位置 将demo_chardev.c文件拷贝到.../drivers/char/目录下. demo_c ...

  7. 【Java】通过移除空行和注释来压缩 JavaScript 代码

    1. [代码]JavaScriptCompressor.java/** * This file is part of the Echo Web Application Framework (herei ...

  8. JQuery验证成功之后,使用ajax提交数据

    function checkForm(){ validator = $("#commentForm").validate({// #formId为需要进行验证的表单ID error ...

  9. 【扬中集训Day6T1】 白日梦

    [题目描述] 白日梦 (daydream.c/cpp/pas) 时间限制: 1 s  空间限制: 256 MB 题目描述 SR需要相当大的睡眠量 某日,他做了一个奇怪的梦,他梦见自己成为了怪物猎人,为 ...

  10. linux--多种包管理工具使用和区别(转)

    Linux包管理工具(转) 在正式进入讨论之前,先贴几条非常有用的link: linux 发行版比较:http://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1 ...