一、引言
ADB(Android Debug Bridge)是一种功能多样的命令行工具,它在开发和调试 Android 设备(如智能手机、平板电脑等)的过程中发挥着至关重要的作用。其主要用途是帮助开发者在电脑和 Android 设备之间建立通信,从而实现对设备的各种操作。
ADB主要用于调试和与设备进行各种交互,如安装和调试应用、访问设备的shell、复制文件等。
- ADB 可以通过 USB 连接或 Wi - Fi 连接来与 Android 设备通信。
- 通过 USB 连接时,需要确保设备的 USB 调试模式已开启。在设备的开发者选项中可以找到并开启该模式。开启后,电脑能够识别设备,ADB 就可以通过 USB 数据线进行通信。
- 对于 Wi - Fi 连接,设备和电脑需要处于同一局域网内。首先通过 USB 连接设备,在命令行中执行特定的 ADB 命令来设置设备的 Wi - Fi 连接参数,之后就可以拔掉 USB 线,使用 Wi - Fi 进行通信了。
二、场景命令
1.设备连接
建立连接
adb connect [移动设备ip地址]
建立连接分为USB连接和WIFI连接。
USB连接,首先要确保打开了手机的USB调试模式,一般在设置中找到【关于手机】,然后点击多次【版本信息】会进入开发者模式,找到并点击 【开发者选项】,然后开启 【USB 调试】。
- 开启后,电脑能够自动识别设备,ADB 就可以通过 USB 数据线进行通信。通过以下命令查看当前连接的设备。
adb devices
其次是WIFI连接,要确保移动设备和你的电脑处于同一个WIFI下,然后在【设置】的【关于手机】下找到设备的【状态信息】去查看【网络信息】,一般可以看到如下信息,其中的192.168.31.161就是你需要连接的IP地址。
- 对于 Wi - Fi 连接,设备和电脑需要处于同一局域网内。首先通过 USB 连接设备,在命令行中执行特定的 ADB 命令来设置设备的 Wi - Fi 连接参数,之后就可以拔掉 USB 线,使用 Wi - Fi 进行通信了。
断开连接
adb dis connect 序列号/IP地址:端口号
2.进入设备(针对同时连接多个设备)
如果有多台设备但是未进行设备的命令指定会出现报错,因为不知道进入哪台设备进行操作,这里就需要介绍adb的设备指定进入命令 adb shell。
通过序列号指定设备进入 shell(适用于多个设备连接的情况)
adb -s 设备序列号 shell (其他操作命令直接写在后面即可:例如 install [package])
- 当有多个设备同时连接到电脑时,为了进入指定设备的命令行环境,需要使用设备的序列号。首先,再次运行 “adb devices” 命令,记录下目标设备的序列号。
- 然后,使用 “adb -s [设备序列号] shell” 命令来进入指定设备的 shell。例如,如果目标设备的序列号是 “6TRK1MSWPC”,则输入 “adb -s 6TRK1MSWPC shell”,这样就可以进入该特定设备的命令行环境,在其中可以执行诸如 “ls”(查看目录内容)、“cat”(查看文件内容)等命令来操作设备的内部文件系统。
退出设备输入<exit>即可
exit
基于 IP 地址指定设备(适用于通过 Wi - Fi 连接的情况)
adb -s ip地址:端口号 shell (其他操作命令直接写在后面即可:例如 install [package])
- 除了通过 USB 连接,ADB 还可以通过 Wi - Fi 连接设备。首先要确保设备和电脑处于同一 Wi - Fi 网络中。
- 通过 USB 连接设备时,在命令提示符或终端中输入 “adb tcp - ip 5555” 命令(5555 是 ADB 使用的端口号),这会设置设备以接受通过 Wi - Fi 的 ADB 连接。
- 然后,断开 USB 连接,在命令提示符或终端中输入 “adb connect [设备 IP 地址]:5555”,其中 “[设备 IP 地址]” 是通过查看设备 Wi - Fi 设置或者其他方式获取的设备在 Wi - Fi 网络中的 IP 地址。
- 连接成功后,就可以使用 “adb shell” 命令进入设备的命令行环境。如果有多个设备通过 Wi - Fi 连接,同样可以使用设备的 IP 地址来区分并进入指定设备,如 “adb -s [设备 IP 地址]:5555 shell”。
退出设备同样是输入<exit>即可
exit
3.文件传输与操作
一般来说文件传输是不需要这么早用到的,但是有些人习惯把apk安装包推送到设备上再进行安装,所以放在这里进行介绍。
本地文件推送(上传)到设备
两边目录根据自己需求进行指定。
adb push [本地文件路径] [设备目标路径] # 实际使用时没有[],直接输入地址,空格隔开即可
设备文件下拉(下载)到本地
两边目录根据自己需求进行指定。
adb pull [设备文件路径] [本地目标路径] # 实际使用时没有[],直接输入地址,空格隔开即可
这里不进行赘述,一般用到的场景是,用于一些测试数据的推送,和日志文件(log-file.txt)/崩溃文件(crash-file.txt)的本地下载,用于开发定位问题。
4.文件安装与卸载
文件安装
这里不需要区分本地和设备路径,因为目录结构的不一致,系统会自动识别。只有命令带有shell时说明是在设备内部操作,需要指定为设备的内部存储地址。
adb install [apk文件路径/文件名]
替换已存在的应用程序,也就是说强制安装
adb install -r [apk文件路径/文件名]
文件卸载
这里需要去获取你需要卸载的应用包名,包名不是安装时候的那个apk文件名称,这个需要通过adb命令进行查看。
adb uninstall [应用包名]
针对一些系统应用,需要通过root管理员权限进行卸载。
adb shell pm uninstall --user 0 包名
5.查看包名
在 Android 开发中,包名(Package Name)是一个唯一标识应用程序的字符串。一般在adb命令中用来作为一个定位标识使用,例如应用的卸载、应用的启动与关闭、文件传输特定应用目录等。
包名通常采用反向域名(Reverse - Domain Name)格式。例如,一个公司的域名是 “example.com”,那么其开发的应用包名可能是 “com.example.appname”,其中 “appname” 是应用的具体名称部分。
查看系统包名
adb shell pm list package -s
第三方包名查看
查看安装的第三方apk的运行包名,并以列表(list)格式输出。
adb shell pm list packages -3
查看设备所有包名
这个是针对设备上正在运行的应用,以列表(list)形式输出所有包名,适合不知道包名,要进行一次全局的查看。
adb shell pm list packages
查看将要启动或退出应用(app)的包名
在面对系统密密麻麻的包名的时候,清楚后台,把已经安装的app进行启动或者退出,获取包名。
adb shell am monitor(只有在启动或退出的时候才会打印)
6.查看活动名
在 Android 系统中,活动(Activity)是安卓应用中用于实现用户界面的一个组件,而活动名(Activity Name)就是用来唯一标识这个组件的名称。活动是用户可以与之交互的屏幕内容,例如,一个登录页面、主页面或者设置页面等都可以是一个活动。
- 活动名的命名遵循 Java 或 Kotlin 的类命名规则。通常是以大写字母开头的驼峰命名法(Camel Case)。例如,
LoginActivity
、SettingsActivity
等。 - 它在应用的代码结构中,与包名相关联。一个完整的活动标识通常是
[包名].[活动名]
的形式。比如在包名是com.example.myapp
的应用中,一个活动可能被标识为com.example.myapp.LoginActivity
。
显示当前处于前台的活动名
其中包含了活动信息和活动名,这个命令很实用,在命令提示符或终端中输入该命令后,会输出大量关于当前活动的信息,其中会有类似 “ACTIVITY com.example.myapp/.MainActivity” 的内容,“com.example.myapp/.MainActivity” 就是当前前台活动的名称(包名 / 活动名)。
adb shell dumpsys activity top
根据包名查看正在运行的活动名
会展示所有的该包名下的所有活动名
adb shell dumpsys package [包名]
获取所有活动信息(包括历史记录)
adb shell dumpsys activity activities
7.启动/结束应用
运行某个APP
- 在大多数情况下,为了准确地启动一个 Android 应用,最好同时使用包名和活动名。活动(Activity)是 Android 应用中最基本的组件之一,用于实现用户界面。应用通常有一个或多个活动,而主活动(通常在清单文件中定义)是应用启动时首先显示的界面。
- 一个具有登录界面和主功能界面两个活动的应用,如果仅使用包名启动,可能会直接跳过登录界面(如果登录界面不是默认启动活动),这可能会导致应用出现错误或者功能异常。所以,为了确保应用的正确启动,最好还是同时使用包名和活动名。
adb shell am start -n [包名]/[活动名]
关闭某个APP
直接关闭
adb shell am force-stop [包名] # Android10以后的版本才可以
模拟正常关闭
- 首先,通过 命令模拟按下 Home 键,将应用置于后台。这一步是为了确保应用不在前台显示。
adb shell input keyevent KEYCODE_HOME
- 然后,使用 命令查看当前处于前台的活动信息,确认没有目标应用的活动处于前台。
adb shell dumpsys activity top
- 如果需要进一步确保应用完全关闭,可以使用命令尝试结束与该应用相关的进程(这个命令在些情况下可能不一定完全有效,但可以作为一种补充方式)。
adb shell am kill [包名]
8.查看设备日志信息
基础命令
adb logcat
打印详细日志
-v time 是指定日志输出的格式为带有时间戳
adb logcat -v time
把日志输出到指定文件夹
adb logcat -v time > [文件夹地址]/log.txt
9.设备操作
获取设备详细信息
adb shell getprop ro.build.version.release
参数名 | 定义 |
ro.build.version.sdk | SDK 版本 |
ro.build.version.release | Android 系统版本 |
ro.build.version.security_patch | Android 安全补丁程序级别 |
ro.product.model | 型号 |
ro.product.brand | 品牌 |
adb shell getprop ro.debuggable | 是否已 root |
persist.sys.isUsbOtgEnabled | 是否支持 OTG |
dalvik.vm.heapsize | 每个应用程序的内存上限 |
ro.sf.lcd_density | 屏幕密度 |
ro.product.cpu.abilist | CPU 支持的 abi 列表 |
ro.product.cpu.abi | CPU 支持位数(32还是64) |
ro.product.name | 设备名 |
persist.sys.locale | 设备的语言 |
ro.serialno | 序列号 |
截取设备屏幕截图
注意:后缀需要 .png 才行, .jpg格式可能会有问题。
adb shell screencap <设备存储地址>.png
屏幕录像
adb shell screenrecord ,<设备存储地址>.mp4
重启设备
adb reboot
获取屏幕分辨率
adb shell wm size
10.Monkey测试
定义
adb monkey
是 Android 系统提供的一个压力测试工具。monkey
这个名字来源于其随机(像猴子一样乱按)的操作方式。它可以向设备发送伪随机的用户事件流,如触摸屏幕、按键、滑动等操作,来对应用进行压力测试,以检测应用的稳定性和健壮性。
命令格式和参数
adb monkey [options] <event - count>
- 其中,
<event - count>
是一个必需的参数,表示要生成的随机事件的数量。例如,adb monkey 100
表示会产生 100 个随机事件。 -p <package>
:指定要测试的应用程序包名。这可以让monkey
只对特定的应用进行测试。例如,adb monkey -p com.example.myapp 500
会对包名为com.example.myapp
的应用产生 500 个随机事件。--throttle <milliseconds>
:设置事件之间的间隔时间(以毫秒为单位)。这个参数可以控制事件发送的速度,模拟用户真实的操作节奏。例如,adb monkey --throttle 300 200
表示产生 200 个随机事件,每个事件间隔 300 毫秒。-s <seed>
:用于指定随机数生成器的种子值。如果使用相同的种子值,monkey
会生成相同序列的随机事件。这在需要重复相同测试场景时非常有用,便于重现问题。例如,adb monkey -s 123 -p com.example.myapp 300
。--ignore - crashes
:让monkey
在应用崩溃后继续发送事件进行测试。正常情况下,monkey
遇到应用崩溃会停止测试,使用这个参数可以使测试继续,以发现应用在崩溃后是否会产生其他连锁问题。--ignore - timeouts
:类似于--ignore - crashes
,不过这个参数是让monkey
在应用发生超时错误后继续测试。
详细命令
这个命令会对包名为 “com.tencent.mobileqqi” 的应用执行 500 次随机事件,事件之间的间隔时间为 1000 毫秒(1 秒),并且在应用崩溃或出现超时错误时继续测试,同时使用种子值(密钥) 123 以便后续需要重复相同的测试场景时使用。
adb shell monkey -p com.tencent.mobileqqi --throttle 1000 500 --ignore-crashes --ignore-timeouts -s 123