揭阳网站制作方案定制,做菠菜网站判多久,低代码app开发平台,百度搜索流量查询介绍
adb的全称为Android Debug Bridge#xff0c;就是起到调试桥的作用。通过adb我们可以在Eclipse/Android Studio中方便通过DDMS来调试Android程序#xff0c;说白了就是debug工具。adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的and…介绍
adb的全称为Android Debug Bridge就是起到调试桥的作用。通过adb我们可以在Eclipse/Android Studio中方便通过DDMS来调试Android程序说白了就是debug工具。adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的android设备(如xiaomi手机)。它的主要功能有: 运行设备的shell(命令行) 管理模拟器或设备的端口映射 计算机和设备之间上传/下载文件 将本地apk软件安装至模拟器或android设备 ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备, 它是开发安卓应用的程序员, 安卓测试开发及测试行业的同学必备的一个调试工具
adb的架构 1、电脑上的命令行客户端你每次在命令行输入adb时称为adb client进程 当我们在命令行输入adb命令时实际启动的是这个进程比如我们在命令行输入一个adb devicesadb client进程创建
2、电脑上还有另一个Server进程称为adb server它是一个守护进程常驻内存 adb client进程使用时如果没有在5037端口找到adb server进程它就会告知启动一个adb server进程启动后的adb server进程会一直监听在5037端口上默认等待着adb client进程与它通信当adb server进程启动后adb client进程每次都会与adb server进程建立TCP连接Network Socket然后将具体的命令传给adb serveradb server可能自己直接处理或者再通过usb或者tcp发送给手机上的adbd进程比如我们在命令行输入adb devices此时的devices是作为“命令”传给adb server进程的adb server收到devices后有两种可能性一种是自己直接就地处理另一种是再把命令传给手机上的adbd进行处理
3、手机上的adbd进程开机自启 adbd进程是手机启动后由init进程fork出来的内核启动后会创建init进程而init在启动过程中会读取一个init.rc文件在init.rc文件中有一个Service List表示需要启动的进程列表里面记录着需要init进程启动的守护进程其中就有个adbd进程。
解决adb调试失败
端口占用
netstat 主机查看主机当前的tcp/ip连接状态如端口的状态。
netstat -aon|findstr 5037 查看端口号
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6820
端口“5037”被PID进程号为6820的进程占用。
查看进程“6820”被哪个应用占用继续执行下面命令
tasklist|findstr 6820
studio64.exe 2380 Console 1 773,192 K
taskkill /pid 6820 删除对应的进程
adb命令
安卓的自动化测试通常需要获取测试应用的包名及测试所在的具体界面, adb命令正好提供了相应的获取方法: 打开需要测试的应用程序 打开CMD命令窗口, 输入adb命令 Mac/Linux平台命令格式: adb shell dumpsys window windows | grep mFocusedApp Windows平台命令格式: adb shell dumpsys window windows | findstr mFocusedApp
参考我之前的文章安卓系统开发的一些ADB命令_systemui tuner_ChampionDragon的博客-CSDN博客
dumpsys详解_ChampionDragon的博客-CSDN博客
如查看所有应用包名 常用命令
1、查看adb工具的版本 adb version
2、帮助信息 adb --help或adb help或adb
3、再次开启ADB服务端这个命令用的也有多数情况下5037端口的adb server如果不在adb程序会再次启动 adb start-server
4、关闭adb server发起这个命令adb server进程会结束注意adb server进程不会自己重新启动 adb kill-server
5、检查手机的连接情况还有个adbl的别名可用可不用 简略信息adb devices 详细信息adb devices -l
6、安装App 普通安装adb install xxx.apk 重新安装保持数据不清除(也称覆盖安装 adb install -r xxx.apk 允许debug包安装adb install -t xxx.apk 授权AndroidManifest.xml文件的运行时权限并安装adb install -g xxx.apk 将多个apk推送到设备作为一个包安装adb install-multiple xxx1.apk xxx2.apk
6、卸载App 普通卸载adb uninstall com.xxx.package_name 保持数据卸载adb uninstall -k com.xxx.package_name
7、Push文件到手机里 从本机推送到Android设备上adb push local remote local表示本机文件的路径 remote表示Android设备的路径
8、Pull文件到主机里 从Android设备上拉取到本机adb pull remote local remote表示Android设备的文件或目录的路径 local表示本机文件或目录的路径 9、使用日志程序这个logcat牛逼所以运行中进程写入的log都能通过logcat看到 adb logcat
adb和adbd分析
在adb中有三个模块分别是adbdadb serveradb client如下表所示 具体的沟通交流层次如下图所示 原文链接adb和adbd分析-CSDN博客
Android 系统内的守护进程 - core类中的服务 (1) : adbd_android 守护进程_小馬佩德罗的博客-CSDN博客
adb server与adbd进程的通信 1、adb client进程通过Socket网络Socket告知adb server进程需要执行的命令adb后面的参数称为命令比如adb devices这个devices就是命令
2、adb server进程发送cmd命令到手机写到Usb Driver文件中Linux中一切都是文件usb驱动程序操作的是文件
3、adbd(adb daemon)的output thread1根线程会一直从/dev/android_usb文件中读取发送过来的cmd命令 备注由于adbd进程读取了/dev/android_usb设备结点文件此时相当于和Linux内核中的usb driver驱动程序进行数据交互
4、adbd中的output thread将解析到的cmd命令写到1个socketpair的A端这是Unix Domain Socket通信简称UDS
5、fdevent_loop文件描述符事件循环线程看来到处都是事件循序会不断的通过使用Linux内核提供的select系统调用IO多路复用机制 在socketpair的B端读取到cmd命令
6、fdevent_loop发出的命令会在adbd的子进程中执行子进程返回的结果往往是标准输出和标准错误此时的结果会再写到socketpair的B端
7、Input thread一个读线程一直阻塞式没有数据只会休眠阻塞在这里并不占用cpu时间片读取socketpair的A端
8、Input thread从socketpair的A端读取到数据后写入设备结点文件/dev/android_usb
9、此时usb driver驱动程序发现设备结点文件改变会再将response发给pc端的adb server进程
10、adb server进程收到响应后会再将响应返回给adb client进程此时你就能在命令行看到命令的输出了标准输出和标准错误
adb devices的工作过程讲解
1、在命令行输入adb devices
2、adb client进程创建并开始执行它先根据约定好的标准去本地的5037端口检查adb Server进程是否已经启动发现5037端口并没有进程绑定此时的adb Client进程会去启动一个守护进程即adb Server进程备注不确定adb Server是先与adbd建立关系还是先和adb client建立连接但我觉得它的线程一直在读取usb的情况
3、接着adb client进程与adb server进程建立TCP连接网络Socket
4、adb client进程会将devices命令字符串传送到adb server进程中adb server进程与adbd可以建立usbable连接或者TCP连接
5、devices命令字符串到达adbd进程后adbd发起处理根据命令的不同分为两种情况内部处理或者交给Android内部的bash处理处理结束后会再将消息告知adb server进程adb server进程再把结果告诉adb client进程结果一般是某个命令的标准输出与标准错误(向屏幕写入的内容devices应该算时个内部处理的命令不用交给bash处理
6、adb client进程将收到的adb server返回的结果展示到标准输出上就在你的黑窗口上屏幕同时adb client进程也会结束掉同时断掉于adbserver的TCP连接 备注TCP连接内核中的标准称为Network Socket不同主机之间的进程可以建立本机中的不同进程间也可以建立 Linux内核中的socketpair函数
socketpair()函数可以创建1对无名、相互连接的Socket也被称为Unix Domain Socket简称UDS如果socketpair()函数执行成功则返回值为00代表成功也称退出状态码创建好的Socket分别是sv[0]和sv[1]执行失败则会返回-1错误码保存在标准错误中
1. 这一对Socket支持全双工通信每一个Socket在同一时刻即可读也可写 2. 读、写操作可以是位于同一个进程的不同线程或者位于不同的进程。如父子进程、兄弟进程注意UDS只能用于具有血缘关系的进程跟PIPE一样但socketpair全双工
若是父子进程一般会做功能分离一个进程读另一个进程写。因为文件描述符sv[0]和sv[1]为进程共享所以读进程需关闭写描述符, 反之写进程需关闭读描述符
UDS与Network Socket
UDSUnix Domain Socket的创建与Network Socket的创建类似它是Socket中的一种现在你知道一共有两种Socket都是进程通信的方式最大的区别如下
1、UDS只能在单机中通信操作的双方可以是同一个进程的不同线程也可以是不同的进程
2、Network Socket则能在不同的主机中通信当然也能在同一个主机中的进程中使用 原文链接https://blog.csdn.net/cadi2011/article/details/104720741
adb client与adb server进程之间的通信
ADB 原理第二篇证实adb client与adb server进程之间的通信_叫我王员外就行的博客-CSDN博客