【Andriod】adb调试安卓手机时连接真机或模拟器的3种方法,你知道么?
一.adb是什么?
adb 称之为:Android 调试桥 (Android Debug Bridge )是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。
- 可以在Android SDK/platform-tools中找到adb 工具或下载 ADB Kits。
注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。
二.adb有什么作用?
ADB 是 Android SDK 里的一个工具, 用这个工具可以直接操作管理Android模拟器或者真实的Android设备。它的主要功能有:
-
在设备上运行Shell命令;
-
将本地APK软件安装至模拟器或Android设备;
-
管理设备或手机模拟器上的预定端口;
-
在设备或手机模拟器上复制或粘贴文件。
ADB 是一个客户端-服务器程序程序,包括三个组件:
- 客户端:负责发送命令。客户端在开发计算机上运行。可通过发出 adb 命令从·命令行终端调用客户端·。
- 后台程序:负责在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。
- 服务器:负责管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。
三.adb连接真机或模拟器的方法
adb连接真机或者模拟器一共有以下3种方法
- 连接模拟器
- 有线连接真机
- 无线连接真机
1.连接夜神模拟器
-
启动夜神模拟器
-
连接模拟器
- 夜神模拟器:设置->点击版本号7次直到出现提示【开发者选项】->返回上一步能看到【开发者选项】->USB调试
2.有线连接真机(需原装数据线)
-
将手机与电脑通过 USB 线连接
3. 无线连接真机(需原装数据线)
-
将 Android 设备与要运行 adb 的电脑连接到同一个局域网
注:连接不成功,检查以下问题
- 确保网络和端口都没有问题,使用的是原装数据线
- 请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect 那一步
- 通过adb kill-server重新启动 adb 然后从头再来一次试试
四.常用命令
1.基本指令
adb devices: 获取设备和设备的状态列表 adb devices -l 查看已连接的设备 adb get-serialno 设备号 adb get-state: 获取设备的状态(设备的状态有三种:device,设备连接正常;offline,连接出现异常,设备无响应;unknown,设备未连接;) adb connect [ip:port]: 远程连接设备(用于在同一网络下adb无线连接设备) adb disconnect [ip:port]: 断开设备连接(用于在同一网络下adb无线连接设备) adb reboot: 重启设备
2.权限指令
- adb root:获取Android管理员(root用户)的权限。
注意:一般测试机可使用root权限。 Android版本9以上,不支持商用机使用root权限,但可以修改底层一些配置
- adb shell
登录设备 shell,该命令将登录设备的shell(内核),登录shell后,可以使用 cd,ls,rm 等Linux命令
3.建立连接
-
基本命令
adb -d:如果同时连了usb,又开了模拟器,连接当前唯一通过usb连接的安卓设备 adb -e shell:指定当前连接此电脑的唯一的一个模拟器 adb -s shell:当电脑插多台手机或模拟器时,指定一个设备号进行连接
exit:退出
-
杀死和重启adb服务
adb kill-server:杀死当前adb服务,如果连不上设备时,杀掉重启。(没事不要用它)
adb start-server:杀掉后重启
-
5037:adb默认端口,如果该端口被占用,可以指定一个端口号,如下命令↓
- adb -p 6666 start-server:任意指定一个 adb shell 的端口
-
4.APK指令
-
列出安装在设备上的应用
adb shell pm list packages 列出所有应用 adb shell pm list package -s 列出系统应用 adb shell pm list package -3 列出第三方的应用 adb shell pm list package -i 列出来源 db shell pm list package -f 列出包名和路径
adb shell pm list packages -d:显示禁用的包名 adb shell pm list packages -e:显示当前启用的包名 adb shell pm list packages -s:显示系统应用包名 adb shell pm list packages -3:显示已安装第三方的包名 adb shell pm list packages xxxx:加需要过滤的包名,如:xxx = taobao
-
安装
adb install :将本地的apk软件安装到设备(手机)上。如手机外部安装需要密码,记得手机输入密码。 adb install -r :覆盖安装 adb install -d :允许降级覆盖安装 adb install -g :授权/获取权限,安装软件时把所有权限都打开
-
卸载
adb uninstall :卸载该软件/app。 注意:安装时安装的是apk,卸载时是包名,可以通过 adb shell pm list packages 查看需要卸载的包名。 adb shell pm uninstall -k :虽然把此应用卸载,但仍保存此应用的数据和缓存 adb shell am force-stop :强制退出该应用/app
adb shell pm uninstall -k :虽然把此应用卸载,但仍保存此应用的数据和缓存 adb shell am force-stop :强制退出该应用/app
-
其他
adb shell pm path packagename 列出应用apk的位置 adb shell pm dump packagename 列出应用的详细信息 adb shell pm clear packagename 清除应用的缓存数据
5.文件操作指令
- pc复制到手机
adb push :把本地(pc机)的文件或文件夹复制到设备(手机)
注意点1:pc机路径与Android机路径,分隔符是不同的。
注意点2:复制失败,大概率是无权限。可先使用上面介绍过的两个命令:adb root;adb remount。在使用 adb push 命令
- 手机复制pc
adb pull :把设备(手机)的文件或文件夹复制到本地。注意点同上
6.日志操作指令
抓取日志的步骤先输入命令启动日志,然后操作 App,复现 bug,再 ctrl+c 停止日志,分析本地保存的文件。
adb logcat把 main log 和 system log打印出来,输出完成后阻塞终端,后面输出的log会及时更新到终端。 adb logcat -d :输出完日之后退出,不会阻塞
使用管道过滤日志
adb logcat | grep ActivityManager:输出包含指定字符串的行(Linux/mac) adb logcat | findstr ActivityManager:输出包含指定字符串的行(windows)
输出日志到指定文件
adb logcat -f /sdcard/log.txt:将日志输出到手机的/sdcard/log.txt,注意是手机上。 adb logcat > E:/log.txt:将日志输出到终端所在电脑的 E:/log.txt 文件。
优先级
V — Verbose (lowest priority, 冗长的) 对应于Log.v(tag)系列函数 D — Debug (调试用) 对应于Log.d()系列函数 I — Info(线上用) 对应于Log.i()系列函数 W — Warning(警告日志) 对应于Log.w()系列函数 E — Error (发生错误) 对应于Log.e()系列函数 F — Fatal (What a Terrible Failure,引起程序崩溃)对应于Log.wtf()系列函数 S — Silent (highest priority, on which nothing is ever printed)
adb logcat -s ActivityManager [打印TAG为ActivityManager的日志] adb logcat -s ActivityManager:I WindowManager:W [输出TAG为"ActivityManager"并且优先级大于等于"Info"和TAG为"WindowManager"并且优先级大于等于"Warn"的日志]
7.系统操作指令
adb shell getprop ro.product.model 获取设备型号 adb shell getprop ro.build.version.release 获取设备 Android 系统版本 adb get-serialno 获取设备的序列号(设备号) adb shell wm size 获取设备屏幕分辨率 adb shell cat /proc/meminfo:获取手机内存信息 adb shell df:获取手机存储信息 adb shell screencap -p /sdcard/screen.png 截图并保存到指定位置 adb pull /sdcard/mms.png :将截图导出到本地 adb pull /sdcard/screenshot.png :将截图导出到本地 adb shell dumpsys activity |find "mFocusedActivity" 查看前台应用包名,适用于 Android 7.0 以下,必须先启动 app adb shell dumpsys activity |find “mResumedActivity”:查看前台应用包名,必须先启动app,适用于Android 8.0以上
8.adb shell am基本指令
1.启动一个 Activity:adb shell am start -n [activityname] 2.等待页面启动完成:adb shell am start -W [activityname] 3.先停止应用再启动:adb shell am start -S [activityname] 4.结束应用: am force-stop [packagename]
9.adb shell dumpsys基本指令
-
监控应用数据:
adb shell dumpsys cpuinfo cpu信息 adb shell dumpsys meminfo 内存信息 adb shell dumpsys power 电源信息 adb shell dumpsys battery 电池信息 adb shell dumpsys wifi wifi信息 adb shell dumpsys notification 通知信息 adb shell dumpsys activity 获取页面信息 adb shell dumpsys activity services [package-name] 查看正在运行的服务
10.adb结合 monkey(压测)
1.什么是monkey
- Monkey 是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试。主要是为了测试app是否存在无响应和崩溃的情况。
2.常用命令
-
随机应用-随机操作
adb shell monkey 100:对该设备下,随机应用,执行100次的随机操作。(伪随机)
-
-p
此参数指定一个或多个包。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。 1.不指定包:adb shell monkey 50 2.指定一个包执行50次:adb shell monkey -p 包名 50 3.指定多个包执行50次:adb shell monkey -p 包名1 -p 包名2 50
-
指定应用-随机操作
adb shell monkey -p 100:指定应用(包)随机操作100次。这里演示的包名为:com.dfcyc.app.dffs
-
指定应用-随机操作并打印日志到指定路径
adb shell monkey -p -v -v -v 100 >D:\log.txt:指定应用随机操作100次并打印日志到指定路径/文件 adb shell monkey -p -v -v -v 100 不输出到指定文件
-
-v 显示日志详细程度
用于指定反馈信息级别(信息级别就是日志的详细程度)。总共分3个级别,分别对应的参数: 1)Level 0 : adb shell monkey -p 包名 -v 100 //默认级别,仅提供启动提示、测试完成和最终结果等少量信息 2)Level 1 : adb shell monkey -p 包名 -v -v 100 //提供较为详细的日志,包括每个发送到Activity的事件信息 3)Level 2 : adb shell monkey -p 包名 -v -v -v 100 //最详细的日志,包括了测试中选中/未选中的Activity信息
11.adb shell input命令:
-
它用于模拟用户通过触摸屏、按键和滑动等方式与设备进行交互。
adb shell input:
text [输入文本] keyevent [输入事件[ tap [点击[ swipe [滑动[
-
-
-
-
-