一、什么是adb?
简称:adb
英文全称:Android Debug Brige
中文全称:Android调试桥(翻译真别扭,还是别翻译的好)
作用:与Android设备进行通信的工具
说明:由于是给开发者使用的工具,不像微信、QQ、淘宝等等有个好听的名字,它只有简写的名字,叫做adb
二、如何安装adb呢?
adb工具已经包含在 Android SDK平台工具软件包中。可以使用 SDK 管理器下载此软件包,该管理器会将其安装在android_sdk/platform-tools/ 下。或者,如果您需要独立的 Android SDK 平台工具软件包,可以点击此处进行下载
三、环境变量的设置,让你在哪里都能输入adb命令
Windows、Mac、Linux下不同的配置方式,只要保证android_sdk/platform-tools/目录可以被找到,adb命令就一定会被找到!
四、连接真机
1、启用开发者选项
连续点按版本号7 次(设置 > 关于手机 > 版本号)
2、启用USB调试
开发者选项 > USB 调试
3、启用文件传输
将USB充电模式改为文件传输
4、手机RSA密钥授权
设备中弹出对话框,必须手工确定才能执行USB调试和其他 adb 命令
五、常用的adb命令
1、查看adb工具的版本
adb version
2、帮助信息
adb --help
或
adb help
或
adb
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
六、聊一聊高级技巧
指定多个设备中的1个或n个
1、首先你得有序列号:adb devices 命令或adb devices -l获取所有设备的序列号
2、adb -s 序列号 命令 …… 举个例子:adb -s dasdfew123 install xxx.apk
或者还有个环境变量可用,标准名称为:ANDROID_SERIAL
1、ANDROID_SERIAL环境变量,指定单个设备序列号
2、ANDROID_SERIAL环境变量,指定多个设备序列号,以逗号“,”作为分隔符
不使用 -s 指定序列号时,adb默认会读取ANDROID_SERIAL环境变量的值
同时使用 -s 和ANDROID_SERIAL环境变量时,-s会覆盖ANDROID_SERIAL环境变量的值
WLAN连接
前提:手机与PC处于同一局域网(同一个WLAN下)
原理:PC上的adb服务端与Android设备上的adbd进程建立TCP连接
如何建立连接?
1、 先将手机与PC通过USB连接
adb tcpip 5555
运行后,Android设备上的adbd进程将开始监听5555端口(处于Listener状态)
2、从USB连接上拔掉手机
adb connect <手机IP>
运行后,PC上的adb服务端与Android设备上的adbd进程(监听5555端口)建立TCP连接
如何断开WLAN连接?
adb disconnect
如何将Android设备的WLAN连接切换为USB连接?
adb usb
七、Unix命令行工具(Android基于Linux内核),其实这些命令都是在Android中执行的,adb只不过做了个转发命令的工作……此时adb后面跟的第一个参数是shell
查看Android设备可用命令(重要)
adb shell ls /system/bin
进入设备shell(Adb Client模拟)
adb shell
执行任意的可用命令(PATH环境变量中任意一个目录有的程序都行)
top
ps
dumpsys
am
input
等等等等等等太多了
八、ADB原理再回顾……
采用客户端/服务端架构(C/S架构)
由3个进程组成
1、Adb Client进程
运行在PC,用于发送命令,为CLI客户端(命令行程序),在命令行中启动,命令运行结束,进程随着结束
2、Adb Server进程
也运行在PC, 由ADB客户端启动,负责与Android设备上的adbd进程通信、负责与PC上的ADB客户端进程通信;PC上的ADB客户端进程无法与Android设备上的adbd进程直接通信,全部都是依靠PC上的ADB服务端进程转发的……
3、adbd进程
运行在Android设备上,负责与PC上的ADB服务端进程通信(由init进程在读取init.rc文件时加载到内存中)
涉及到的进程通信方式主要以下3种
1、ADB Client与Adb Server
ADB客户端、ADB服务端均运行在PC上,采用TCP通信,即Network Socket
2、Adb Server与adbd进程
usbcable方式通信(默认)
或者
TCP连接(无线adb,其实就是Network Socket)
3、Linux USB驱动与adbd进程
采用Unix Domain Socket通信
进程生命周期
1、adb client进程的生命周期
在命令行中输入任意的adb命令,会创建adb client进程,等待adb server的返回结果,拿到结果后,adb client进程会将结果写入标准输出,然后进程结束
2、adb server进程的生命周期
任意客户端唤起(如adb命令行,Android Studio【借助adb client】等等),它常驻在PC的内存中,作为守护进程存在
3、adbd进程的生命周期
由init进程读取init.rc文件(该文件存有adbd进程的配置信息),然后fork出adbd进程(作为子进程),adbd进程是在Android系统启动后就会创建的,它一直运行在Android的内存中,也是个守护进程
5037端口(标准)
1、当启动任意一个ADB客户端(Android Studio、命令行工具等等),adb client进程会检查adb server 进程是否在5037端口监听
2、如果adb server没有运行在5037端口上监听,adb client进程将启动adb server进程
3、adb server启动后会与PC的5037端口绑定起来(TCP端口),在5037端口监听adb client发出的命令
参考文献:
配置设备上的开发者选项 | Android 开发者 | Android Developers 配置设备上的开发者选项