ADB
Adb的全称为Android Debug Bridge:android调试桥梁 Android的初衷是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试apk,因此adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能; 我们可以在android sdk安装目录的platform-tools目录下找到adb工具。在window下需要配置adb环境变量,读者自行搜索博客配置(配置好可以在cmd中adb命令查看),在Ubuntu可以sudo apt-get install adb ,安装好后adb version 查看adb 版本。
ADB 问题
- 在后续使用adb命令时出现
powershell error: no devices/emulators found
时,是没有找到设备或模拟器导致的。 ① 检查是否连上了设备或者打开了模拟器 ②检查设备或模拟器是否打开了开发者模式,读者自行搜索如何开启。 ③adb功能异常,重启adb (1)把adb服务杀死:adb kill-server (2)重启adb服务:adb reconnect 注:如果使用的不是真机而是模拟器,需要进行连接操作,即运行adb connect 127.0.0.1:62001 其中62001为模拟器所使用的端口号。
- cat:xxx Permission denied
权限不足问题,为了获得执行权限,借助chmod指令修改文件权限即可。可以使用访问Android
ADB 命令
adb 命令的基本语法:adb [-d|-e|-s ]
- 如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb 。
- 如果有多个设备/模拟器连接,则需要为命令指定目标设备。
参数 | 含义 |
---|
-d | 指定当前唯一通过 USB 连接的 Android 设备为命令目标 | -e | 指定当前唯一运行的模拟器为命令目标 | -s | 指定相应 serialNumber 号的设备/模拟器为命令目标(adb devices前面部分) |
adb devices 查看已经连接的设备 输出格式为 [serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种:
- offline —— 表示设备未连接成功或无响应。
- device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到adb,但启动完毕后系统才处于可操作状态。
- no device —— 没有设备/模拟器连接。
以上输出显示当前已经连接了三台设备/模拟器,cf264b8f、emulator-5554 和 10.129.164.6:5555 分别是它们的 SN。从 emulator-5554 这个名字可以看出它是一个 Android 模拟器,而 10.129.164.6:5555 这种形为 : 的 serialNumber 一般是无线连接的设备或 Genymotion 等第三方 Android 模拟器。 adb connect <device-ip-address> 通过 IP 地址连接设备。(需要连接USB数据线,确认 Android 设备与电脑连接到了同一个 WiFi) 不需要连接USB数据线的情况下(需要 root 权限): 在 Android 设备上安装一个终端模拟器。 已经安装过的设备可以跳过此步。推荐使用的终端模拟器下载地址是:Terminal Emulator for Android Downloads 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。 打开 Android 设备上的终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
然后就是adb connect <device-ip-address> ,出现connected to :5555 这样的输出则表示连接成功。 (有的设备,可能需要重启 adbd 服务,在设备的终端模拟器上运行:restart adbd 如果 restart 无效,尝试以下命令:stop adbd和start adbd ) adb disconnect <device-ip-address> 断开无线连接 adb get-serialno 获取手机序列号 adb shell getprop ro.product.model 查看手机设备型号 adb shell wm size 查看手机分辨率 adb shell cat /sys/class/net/wlan0/address 获取手机的mac地址 adb logcat 查看日志 adb shell dumpsys battery 查看电池信息 adb shell ps 查看进程 adb shell top 查看cpu使用情况 adb install [-lrtsdg] [apk文件的路径] apk文件需要放到你命令执行的文件夹下,或者写上apk的绝对路径
参数 | 含义 |
---|
-l | 将应用安装到保护目录 /mnt/asec | -r | 允许覆盖安装 | -t | 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用 | -s | 将应用安装到 sdcard | -d | 允许降级覆盖安装 | -g | 授予所有运行时权限 |
adb -s [设备号] install [apk文件的路径] 多个设备安装apk adb uninstall [apk文件的路径] 普通卸载 adb uninstall -k [apk文件的路径] 卸载但是保留数据 adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER] 查看手机上所有安装的app包名 即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:
参数 | 显示列表 |
---|
无 | 所有应用 | -f | 显示应用关联的 apk 文件 | -d | 只显示 disabled 的应用 | -e | 只显示 enabled 的应用 | -s | 只显示系统应用 | -3 | 只显示第三方应用 | -i | 显示应用的 installer | -u | 包含已卸载应用 | <FILTER> | 包名包含 <FILTER> 字符串 |
adb shell dumpsys package com.ss.android.ugc.aweme | findstr activity 获取某个应用包名的启动入口 adb shell am start -n [包名]/[启动入口] 启动某个app adb shell screencap [保存路径] 屏幕截图 adb shell screenrecord [保存路径] 录制视频 adb push 文件名 手机端SDCard路径 上传文件到手机 adb pull [手机上文件路径] 从手机端下载文件 adb shell input tap x坐标轴 y坐标轴 模拟屏幕点击事件 adb shell input swipe 开始x轴 开始y轴 结束x轴 结束y轴 过程持续时间毫秒 模拟手势滑动事件 adb shell input keyevent [key值] 模拟点按键盘按钮 db shell input text [字符串信息] 向屏幕输入一些信息(%s是空格) adb shell am broadcast -a "broadcastactionfilter" 发送广播 adb shell am start -a [浏览器包名] -d [网址] 使用自带浏览器打开网页 adb vivoroot 获取手机root权限 adb remount 连接不稳定时需要挂载 adb reboot 正常重启 adb reboot recovery 重启手机到recovery adb reboot bootloader 重启到bootloader界面 adb kill-server 关闭adb服务 adb start-server 启动adb服务(一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。) adb -P <port> start-server 指定 adb server 的网络端口。默认端口为 5037。
以 root 权限运行 adbd
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。
所以如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用 adb xxx 执行。这时可以 adb shell 然后 su 后执行命令,也可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令了。命令adb root ,正常输出为restarting adbd as root 。再运行 adb shell ,命令行提示符就会变成 # 。 有些手机 root 后也无法通过 adb root 命令让 adbd 以 root 权限执行,比如三星的部分机型,会提示 adbd cannot run as root in production builds,此时可以先安装 adbd Insecure,然后 adb root 试试。
相应地,如果要恢复 adbd 为非 root 权限的话,可以使用 adb unroot 命令。
adb详细
|