ADB实用命令(APP测试)

一、引言

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)。例如,LoginActivitySettingsActivity等。
  • 它在应用的代码结构中,与包名相关联。一个完整的活动标识通常是[包名].[活动名]的形式。比如在包名是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.sdkSDK 版本
ro.build.version.releaseAndroid 系统版本
ro.build.version.security_patchAndroid 安全补丁程序级别
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.abilistCPU 支持的 abi 列表
ro.product.cpu.abiCPU 支持位数(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值