提供的一个通用的调试工具,借助这个工具,我们可以很好的调试开发的程序,adb.exe在你安装的android的sdk开发包platform-tools目录下。
ADB是一个C/S架构的应用程序,由三部分组成:
1)adb client, 运行在PC上(为DDMS,即IDE工作)
2)adb daemon(守护进程),运行于Emulator(为与Emulator中的VM交互工作);
3)adb server(服务进程),运行在PC(任务管理器上有),管理着adb client和adb
daemon的通信。
server与client通信的端口是是5037,adb
server会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adb
daemon连接为后面调试使用。
adb使用方法:
adb [-d|-e|-s ]
当你发出一个命令,系统启用Android客户端。客户端并不与模拟器实例相关,所以如果双服务器/设备是运行中的,你需要用-d选项去为应被控制的命令确定目标实例。关于使用这个选项的更多信息,可以查看模拟器/设备实例术语控制命令。
1、查询模拟器/设备实例
在发布adb命令之前,有必要知道什么样的模拟器/设备实例与adb服务器是相连的。可以通过使用 devices
命令来得到一系列相关联的模拟器/设备
adbdevices
2、安装应用到模拟器/设备:
你可以使用adb从你的开发电脑上复制一个应用程序,并且将其安装在一个模拟器/设备实例。
像这样做,使用install命令。这个install命令要求你必须指定你所要安装的.apk文件的路径:
adbinstall
例如:Weibo_4.1.1.apk是在我的C盘中,
C:\>adbinstallweibo_4.1.1-apk
3、卸载应用程序:
adbuninstall
注意:卸载软件时,卸载的是包名,后面跟的是包的名字,而不是.APK.
4、从模拟器/设备中拷入或拷出文件:
可以使用adbpull、push命令将文件从模拟器/设备中拷贝出来或从电脑拷入。
adbpull
用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑
adbpush
用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)
5、启动Linux命令界面shell
adbshell
Android本来就是一个linux *** 作系统,通过上面的命令,就可以进入设备或模拟器的shell环境中,所以大部分都是linux的命令,如mkdir,ls,netstat,mount
等。
主要介绍几个Android特有的。
Getprop:返回Android的所有系统属性。
Getevent:打印所有的键盘和触摸事件
Logcat:输出日志
LS:用于显示目录内容
6、查看bug报告:
adb bugreport
7、记录无线通讯日志:
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
adb shell
logcat -b radio
8、获取设备的ID和序列号:
adb get-product
adb get-serialno
使用此命令之前,先确定你的电视已打开adb调试服务如何打开请参考:TCL MS平台电视如何实现adb连接从而安装第三方应用程序 需要用到的软件
Windows下,选择”开始”->运行->cmd,进入命令行模式;
进入adb的目录,如adb在D盘adbtools文件夹中,则:
d:
cd adbtools
如果嫌麻烦,可以在adb目录中右击|在此处直接打开命令窗口
输入adb后回车
如果有adb的信息出现,则说明连接adb成功。
如果没有,则检查adb的文件、路径等是否完整正确。
Adb成功后查看你电视的IP,一般在系统设置|网络设置中
连接Android TV的IP,如IP为...,则输入:
adb connect ...: 然后回车
如果出现connected to ...:,则说明连接成功。
如果没有,则检查板子的IP、网络等是否正常。
连接成功后
就可以安装第三方app了。如安装第三方app腾讯视频(路径为D:apk qqHD.apk)。
adb install "D:apkqqHD.apk "
若出现success,则成功安装。
如果安装过程中,出现错误,请查看第一句话,看自己是否符合,若不符合,再按步骤仔细排查一遍。
做过安卓开发的朋友或多或少都遇到过让人厌恶的类似于“could not read ok from ADB Server”的错误。产生这个错误的原因可能多种多样,每次遇到问题的时候,可能大部分人都和我一样,去google一下这个问题别人是如何解决的。假设一下子找到解决了,就放过,下次在遇到的时候同样的再去google一下就好了。但是,这样不是正确的治学态度,为此孔祥子决定去扒一扒!
如下,是我在发现Android studio连接不上手机的时候,尝试去启动一个adb server,但是失败了。
<pre>
根据问题提示,5037端口被占用了。下面就来看看到底是哪一个端口被占用。
<pre>
C:\Users\zxy>netstat -ano | findstr "5037"
TCP127.0.0.1:5037 0.0.0.0:0 LISTENING 7912
TCP127.0.0.1:5037 127.0.0.1:50025ESTABLISHED 7912
TCP127.0.0.1:5037 127.0.0.1:56501ESTABLISHED 7912
TCP127.0.0.1:50025127.0.0.1:5037 ESTABLISHED 7120
TCP127.0.0.1:56501127.0.0.1:5037 ESTABLISHED 1264
</pre>
果然,5037被进程id为7912的进程占用了。顺藤摸瓜,看看到底什么进程捣的鬼,
<pre>
C:\Users\zxy>tasklist | findstr "7912"
romaster_daemon.exe 7912 Console1 3,024 K
</pre>
看到了吗,是这个进程romaster_daemon.exe ,好了,到此为止找出来是哪一个程序了,下面打开任务管理器,kill掉就可以了。
Android adb(Android Debug Bridge) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备 *** 作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。
该工具作为一个客户端-服务器程序,包括三个组件:
客户端(adb client) ,该组件发送命令。客户端在开发计算机上运行。可以通过发出 adb 命令从命令行终端调用客户端。
这里说的客户端,其实包含很广泛。例如我们在命令行窗口运行一个adb命令,其实就是一个adb客户端。还有,我们在android studio中通过点击运行或者调试按钮,app就安装到手机里面了,这个也可以看做是adb客户端。对应的后台进程名称 根据运行的程序的不同而不同。
后台程序 ,该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
也就说,开发者测试手机或者模拟器上运行的后台进程,负责接收命令,并运行命令。这个名字对应应该是adbd
具体如下
服务端 ,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。
您可以在 android_sdk/platform-tools/ 中找到 adb 工具
这个是在开发者自己的电脑上,运行的旨在管理adb客户端和手机端的后台程序通信的一个管理程序。
具体流程如下
启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。
然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描 5555 到 5585 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 , 这些端口包括用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
以此类推...
如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。
注意 ,这里所说的端口都是开发者电脑上的端口。
我的理解,偶数端口用来实际的数据传输。奇数端口用来发送控制命令和连接用的,例如调试。(如果不正确请指出)
当服务器已设置与所有模拟器实例的连接后,您可以使用 adb 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,因此,您可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。
解读一下
注意:上图中的标识为黄色的区域的进程为后台守护进程。
Adb Server运行在开发者电脑上,任何adb client都要等待这个运行起来之后才能做后续的工作。电脑上的android studio或者eclipse等一些adb client和它交互。一旦adb client的命令被发送到手机中,并且被手机中的adbd接收之后,才能和手机交互。
然后在看一张更详细的图
这个图,详细的解释了我运行adb命令中的详细细节。
关于adb的详细命令可以参考: http://adbshell.com/commands 这个网站详。
看了之后,对于前面的5037被占用,导致无法连接手机的原因,我想,我们应该有了更深层次的理解。同时对于其他情况的不能连接手机,我们下次就会有了自己的思考了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)