要用网络调试Android需要设备已经获取root权限

如果手机没有命令行工具,请先在手机端安装终端模拟器,然后在终端输入:
$su
#stop adbd
#setprop service.adb.tcp.port
#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
#start adbd

Android手机WiFi调试,查看logcat

在项目开发过程中,遇到这样的场景: 
有写特殊Android设备只有一个USB口,当挂载U盘之后就无法连接USB实时进行调试了。这儿时候如果设备可以开启WiFi,那就可以用WiFi进行调试;

要开启网络调试,执行下面指令即可:

$su
#stop adbd
#setprop service.adb.tcp.port
#start adbd

上面完成之后就可以用adb命令:

adb connect 192.168..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, "");
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

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, "");
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就不能用了。

Android 手机 无线 ADB的更多相关文章

  1. Android手机无线adb

    1.首先电脑,手机通过数据线链接电脑,然后通过adb devices 查看到已连接 2.输入:adb tcpip 5555 3.输入:adb connect 222.222.221.137:5555 ...

  2. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  3. 将Android手机无线连接到Ubuntu实现唱跳Rap

    您想要将Android设备连接到Ubuntu以传输文件.查看Android通知.以及从Ubuntu桌面发送短信 – 你会怎么做?将文件从手机传输到PC时不要打电话给自己:使用GSConnect就可以. ...

  4. 使用adb命令操控Android手机(adb命令)

    1) 手机连接电脑之前 首先,查看安卓手机是否已经连接上电脑 adb devices 让adb一直查找安卓设备,找到后才停止 adb wait-for-device 2) 手机连接电脑后的操作 2.0 ...

  5. (转载)Mac系统下利用ADB命令连接android手机并进行文件操作

    Mac系统下利用ADB命令连接android手机并进行文件操作 标签: Mac adb android 2016-03-14 10:09 5470人阅读 评论(1) 收藏 举报  分类: Androi ...

  6. adb无线连接android手机进行调式,无需获得root权限

    利用adb无线连接android手机进行调式 无需获得root权限 转载来自CSDN  https://blog.csdn.net/lnking1992/article/details/5346518 ...

  7. Pyqt adb 获取Android手机屏幕

    adb的全称为Android Debug Bridge,就是起到调试桥的作用.adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会da ...

  8. Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)

    随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...

  9. [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案

    时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...

随机推荐

  1. 决策树和adaboost

    前面:好老的东西啊,啊啊啊啊啊啊啊啊啊 来源于统计学习方法: 信息增益: 其中 信息增益率: 基尼指数: 取gini最小的 先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造. 后 ...

  2. IOS使用命令行打包

    1.安装证书 develop:调试证书,包含调试信息 安装时需要证书已加入设备UDID或是越狱设备才能安装. distribution:正式证书,发布到appstore所用,屏蔽了调试信息,要想测试安 ...

  3. java基础42 File类的构造函数及其方法

    本文知识点(目录): 1.IO流(Input Output)    2.IO流技术的运用场景    3.File类的构造函数(方法)    4.File类的一些常用方法    5.实例(解析File类 ...

  4. 安装window系统

    安装服务器系统,进入windowpe后将iso中sources,bootmgr,和boot拷贝到C盘,执行bootsect.exe  /nt60  c:,调试froad13的consle win8 改 ...

  5. P2448 无尽的生命

    Description 小 a有一个长度无限长的序列 p = (1, 2, 3, 4 --),初始时 pi = i 给出 m 个操作,每次交换两个位置的数 询问最后序列逆序对的个数 Solution ...

  6. AdvStringGrid 固定行、列

  7. hihoCoder #1190 : 连通性·四(点的双连通分量模板)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho从约翰家回到学校时,网络所的老师又找到了小Hi和小Ho. 老师告诉小Hi和小Ho:之前的分组出了点问题,当服 ...

  8. C实现线程池

    简介:这里使用linux下的互斥锁和条件变量实现了一个线程池.代码由一个未知作者完成,第二任作者补充优化. 本人仅仅是做了一些注释工作. 代码如下: /*! .h */ #include <st ...

  9. js中的call,apply,bind区别

    在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...

  10. MySQL学习笔记:Engine存储引擎

    在使用Mysql建表过程中,有时候会遇到一些奇怪的现象.例如,如何插入数据就是查询不到数据,此时可能是建表的存储引擎设置成为engine=blackhole的原因. 1.engine=innodb 提 ...