adb的那点小事——远程adb调试

1.   前言

1.1.  写在前面的话

在之前的一篇文章《360电视助手实现研究》中介绍了在局域网内直接通过adb安装应用,本文接下来继续介绍adb一点有意思的小东东。本系列之所以取名《adb的那点小事》是因为,只想介绍一些有意思的而且平时大多数人关注不多的方面,类似于“adb原理”、“adb如何使用”之类的老生常谈不在本文的介绍范围内。

言归正传,本文介绍的内容是:在局域网内,如果进行adb远程调试,即:在没有数据线的情况下,如何在局域网内使用adb开发。

1.2.  本文的背景

作为一名Android程序员,每天接触最多的就是eclipse和adb了。在开发的过程中,这几种场景我们应该并不陌生:

A.        手机正在测试同学手中,但是我们想要抓log。那么接下来会有两种选择:

a)         让测试的同学帮忙抓log,但可能抓不到自己想要的;

b)         让测试同学把手机送过来,或者自己去取,但需要浪费至少10几分钟。

B.        电脑连接一台刚才其他同学(开发或测试)手机拿过来的机器。那么接下来可能需要等待几分钟的时间来安装手机驱动。

C.         长时间的使用,adb数据线损坏或者不太灵敏。

那么有没有一种好的办法可以解决上述问题呢?本文接下来将做一个探讨。

2.   技术实现研究

2.1.  远程调试的原理

要了解为什么可以远程调试,首先还是要简单的说一下adb的原理。我们平时所说的adb在Android中是被实现为一种C/S结构的,其中Server端被称为adbd,也即adb守护进程,该进程运行在手机中。对于C/S结构的命令的执行响应过程,大家应该都比较熟悉,不再做介绍。这里继续说一下adbd,adbd提供了两种监听客户端请求的方式:USB和TCP/IP,其中USB方式是系统的默认监听方式。

所以,结合《360电视助手实现研究》中的介绍,接下来我们应该怎么做就比较明显了:

1.         首先,设置手机的adbd为TCP/IP方式;

2.         其次,设置adbd监听某一特定的端口;

3.         最后,在远程(电脑上)通过adb connect连接到手机。

通过以上三部,我们就可以远程adb调试和打印log了。接下来将介绍具体的实现,及需要注意的一些问题。

2.2.  具体技术实现

要实现adb远程调试,首先需要手机具有root权限,可以通过下面的代码进行简单的判断:

在判断手机具有临时root权限后,接下来就是设置adbd监听的端口和重启adbd使端口生效了,代码如下:

在默认情况下adbd监听的端口为“5555”,这里可以根据需要(比如5555是否被占用)进行修改。

在完成上一部的操作后,可以到手机“设置->WLAN->当前正在使用的wifi热点的信息”中查看IP信息,也可以通过下面的方法获取:

接下来就可以在电脑上的cmd下通过“adb connect”连接刚才的IP,进行远程adb的调试了,如果成功会显示“connected
to xxxxx”;连接失败则提示”unable to connect to xxxxx”,下面是我电脑操作的截图:

最后,在远程调试完成后,记得将手机adb恢复到usb模式:

好了,到这里,本文就介绍完了,有问题环境交流讨论。

时间: 2024-10-11 15:19:46

adb的那点小事——远程adb调试的相关文章

教你在mac上配置adb环境变量!!附上adb无法识别M2的解决办法

[经验技巧] 教你在mac上配置adb环境变量!!附上adb无法识别M2的解决办法 楼主表于 2012-11-13 15:47:26 最近小编突然换了mac做了主力机,作为一个习惯在Windows使用adb刷机和安装卸载软件的屌丝来说,突然不能使用adb简直就是痛不欲生啊.还好经过度娘的指点,我成功的配置了环境变量. 下面就跟大家简单说一下具体的一些步骤,其中我为了大家更容易理解,精简掉了一些无关紧要的步骤,该教程只限于配置使用adb命令刷机或者做一些简单操作的用户~ -------------

远程debug调试java代码

远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试.生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试. 整体过程是通过修改远程服务JAVA_OPTS参数,然后本地通过Eclipse或IDEA等工具调试. 下面简单介绍下理论. 理论 JPDA(Java Platform Debugger Architecture)是Java平台调试体系结构的缩写.由3个规范组成,分别是JVMTI(JVM Tool Interface),JDWP(Ja

Android:ADB server didn't ACK或者adb server is out of date. killing解决办法

出现这个原因我个人感觉有两个.一.5037端口被别的程序或者进程占用:二.adb占用的不是5037端口.很多人仅仅知道第一种二忽视了第二种. 不管哪个原因,解决问题的办法都一样.这里做一个整理如下: 1. 错误信息: C:\Users\lizy>adb devices adb devicesadb server is out of date.  killing... ADB server didn't ACK* failed to start daemon *error: unknown hos

ADB server didn't ACK(adb不能开启

1.打开资源管理器,把adb.exe关闭 2.打开cmd,输入adb kill-service 3.(1)查看5037端口被谁占用了,开始--运行--CMD 到命令提示符,输入 netstat -aon|findstr "5037", (2)tasklist|findstr "2748".这个2748是pid.(3)taskkill /f /t /im adb.exe杀死进程 4.看看电脑是否打开豌豆荚,收集助手之类的软件,因为这些软件会占用资源 ADB serve

idea导入maven项目,web browser远程单步调试

问题:之前用idea14.1.3导入maven项目后,maven的dependencies不能自动解决依赖,到处都是红色的红线,看着就受不了.虽然不影响命令行编译,但是看着实在是不爽.总结下面几小步: 一.导入maven项目 1) 2) 然后下一步下一步默认设置完成导入,这个时候可以右击pom.xml文件reimport运气好一次导入成功那就没什么问题了,如果导入之后还是一片红不能自动解决依赖,那么请做下面的设置. 检查是否有maven插件,有的话进行下面的设置: 至此简单的设置已经结束,设置完

十一、pycharm 远程代码调试

---恢复内容开始--- 十一.pycharm 远程代码调试 第三方登录和支付,都需要有服务器才行(回调url),我们可以用pycharm去远程调试服务器代码 服务器环境搭建 以全新阿里云centos7系统为例: 11.1.阿里云安全组配置 快速创建规则,选好常用端口,授权对象,确定就可以了 还要添加一个安全组规则,设置端口范围,授权对象,点确定 ssh连接 yum install openssh-server -y service sshd restart #xshell连不上,SSH服务端不

adb pull 报错处理:adb: error: cannot create file/directory 'E:\': No such file or directory

adb pull /sdcard/1.txt e:/ 报错:adb: error: cannot create file/directory 'E:\': No such file or directory [处理方法:] 在e盘下新建一个文件夹123,将手机中的文件pull到123文件夹中,OK adb pull 报错处理:adb: error: cannot create file/directory 'E:\': No such file or directory 原文地址:https:/

ADB 远程无线调试

由于自己购买的x4412 Android开发板存在一个问题,是无法同时链接USB线,和插入无线网卡.只能使用其中一个功能 需要复现一个DRM在线下载的功能,同时需要抓起一些日志信息,此处就想到了使用 adb 的远程调试功能来解决这个问题. 手机和PC处于同一个局域网中,手机中下载 终端模拟机 ,手机需要Root. setprop service.adb.tcp.port 5566 //指定一个端口号 stop adbd start adbd //重启一下 adbd服务 netcfg //查看手机

windows下远程adb

Android 使用 adb命令 远程安装apk cmd下到你的adb文件夹,一般在platform-tools下. adb devices 列出全部设备 adb connect xxx.xxx.xxx.xxx 连接到该设备 adb logcat 启动logcat adb install -r c:\my.apk 将本地apk安装到远程机器 adb uninstall <package> 卸载(比如com.xxx.xxx)