Adb的全称为AndroidDebugBridge:android调试桥梁,可以看出,Android的初衷是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试apk,因此adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能;我们可以在androidsdk安装目录的platform-tools目录下找到adb工具;现在安卓系统的权限机制越来越完善,很多希望能够绕开权限管理机制进行的一些操作都已经无法使用,但是Adb却可以实现。实际上Adb在某种程度上有很大权限的,即使是在最新版本的Android系统上。因为Adb的设计初衷是为了方便开发人员调试,因此必然需要暴露一些权限以外的接口。于是很多公司利用这个特性可以绕开权限机制在非Root非定制机上做一些操作(具体用法就是下面说的这些),当然方式也是五花八门,比如通过手机OTG连接,这里不再赘述了。
ADB三大组件为了方便理解,我们从三个指令入手,我们经常会用到
adbstart-server
adbdevices,adbkill-server
然后我们经常会看到这样的输出界面:
C:\Users\dell>adbdevices
Listofdevicesattached
*daemonnotrunning.startingitnowattcp:5037*
*daemonstartedsuccessfully*
于是这里有三点疑问,为什么是server,server对应的是服务器或者服务端吧?如果手机是客户端,服务端是不是指电脑上开启的服务。还有这个呆萌(daemon)又是啥?ADB是一个C/S架构的应用程序,由三部分组成:
1.运行在pc端的adbclient:
命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adbserver建立连接后adbclient就可以向ADBservcer发送服务请求;
2.运行在pc端的adbserver:
ADBServer是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADBServer还需要将adbclient的请求通过usb或者tcp的方式发送到对应的adbd上;
3.运行在设备端的常驻进程
adbdemon(adbd):
程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。
ADB常用命令1.adbdevices,获取设备列表及设备状态
2.adbget-state,获取设备的状态
设备的状态有3种,device,offline,unknown
device:设备正常连接
offline:连接出现异常,设备无响应
unknown:没有连接设备
3.安装卸载应用程序
adbinstall用于安装
安装成功,返回成功提示"Success";
安装失败,会返回以下:
INSTALL_FAILED_ALREADY_EXISTS
此时需要用-r参数来重新安装。
INSTALL_FAILED_SIGNATURE_ERROR
应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。
INSTALL_FAILED_INSUFFICIENT_STORAGE
存储空间不足,需要检查设备存储情况。
adbuninstall用于卸载
adbuninstall后面带的是应用的包名,而不是应用名。
查看系统所有应用的包名:
adbshellpmlistpackages–f