有测试问题请微信联系作者,备注来意(点击此处添加)
240
一名普通的测试打工人;专注自动化测试技术研究、实践、总结、分享、交流。
用我多年的经历,给大家带来更多实用的干货。
人若有志,就不会在半坡停止。

【ADB基础】ADB详解及使用

AndroidDebugBridge(ADB)的基本概念

ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。ADB 也是 Android SDK 中的一个工具,可以直接操作管理 Android 模拟器或者真实的 Android 设备。

ADB运行架构

  • adb client--->adb shell echo xxx
  • adb server--->adb -l tcp:5037 fork-server server --reply-fd 4(可使用命令查看此服务ps -ef | grep adb)
  • adbd--->adb shell ps | grep adbd

ADB 的运行架构主要包括以下几个部分:
客户端:用户端的命令行工具,可以在任何有相应ADB版本的计算机上运行。
守护进程 (adbd):在 Android 设备或模拟器上运行的后台程序,用于与 ADB 客户端通信。
服务器:一个接收命令并将其转发给守护进程的进程,运行在使用 ADB 的计算机上。

ADB用途

  • 设备管理
  • shell操作
  • 环境配置
  • 常见命令
  • APK管理
  • 文件操作
  • 日志抓取
  • 系统信息获取
  • 与monkey工具结合进行测试

dumpsys

dumpsys是Android系统的调试工具,提供有关系统服务的信息

pm(Package Manager)

主要用于获取和安装在 Android 设备上的应用信息。

Shell基础

【Shell基础】Bash基础与Linux三剑客

adb常用命令

# 启动服务
adb start-server

# 终止服务
adb kill-server

# tcpip命令在电脑端开启指定手机设备的tcpip端口(连接远程手机,步骤1:先usb连接手机,然后执行tcpip)
adb -s {deviceName} tcpip 5555

# 开启adb远程端口
adb nodaemon server -a -P 5037

# 启动adb service
adb service

# 连接设备
adb connect ip:端口

# 获取设备信息
adb devices
adb shell getprop ro.product.model  # 获取设备型号

# 断开连接
adb disconnect ip:端口

# 查看被占用端口对应的PID
netstat -aon | findstr "5556"

# 获取所有的dumpsys子命令
dumpsys | grep -i DUMP

# 获取当前activity
adb shell dumpsys activity top

# 获取activity的记录,可以获取到appium依赖的原始activity
dumpsys activity activities

# package信息查询
dumpsys package

# 获取指定包基本信息
adb shell dumpsys package com.xueqiu.android

# 查看日志信息
adb logcat -v -s ActivityManager > /sdcard/log.txt     # -s 过滤内容
adb shell logcat -v time *:E > <存放路径\log.txt>  # 打印级别为Error的信息
  日志的等级:
    -v:Verbse(明细)
    -d:Debug(调试)
    -i:Info(信息)
    -w:Warn(警告)
    -e:Error(错误)
    -f:Fatal(严重错误)

# 手机输出文件到PC
adb pull /data/log.txt E:\logs\log.txt

# PC输入文件到手机
adb push /data/log.txt E:\logs\log.txt

# 列出所有应用
adb shell pm list package 
adb shell pm list package -f

# 列出第三方应用
adb shell pm list package -3 

# 列出所有测试包
adb shell pm list instrumentation 

# 安装与卸载
adb install {全路径文件}      # -r 保留数据及缓存文件 
adb uninstall  {包名}

# 清除缓存数据
adb shell pm clear com.ablesky.ui.activity

# 截屏并保存文件在手机上为xxx.png
adb shell /system/bin/screencap -p /sdcard/xxx.png
adb shell screencap -p /sdcard/mms.png  # 屏幕截图

# 录屏,命名以.mp4结尾
adb shell screenrecord <存放路径/xxx.mp4>
adb shell screenrecord --time-limit 10 <存放路径/xxx.mp4>  # 录屏时间为10秒

# 启动程序
adb shell am start -n com.ablesky.ui.activity/com.ablesky.activity.SplashActivity

# 杀掉某进程
taskkill /pid 2027 /f 

# monkey
adb shell monkey -p 包名 -v -v 50 > xx.txt

# 参数注解:app包名 日志等级 50个随机事件 输出日志
adb shell monkey -p com.xiaxl.demo --pct-motion 10 --pct-touch 90 --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v -v -v 192000 > 1.txt

# 获取系统通知
adb shell dumpsys notification

# 获得内存信息
adb shell dumpsys meminfo com.android.settings
adb shell cat /proc/meminfo  # 获取手机内存信息

# 获取手机存储信息
adb shell df

# 获取CPU信息
adb shell dumpsys cpuinfo

# 获取GPU绘制分析
adb shell dumpsys gfxinfo com.android.settings

# 获取短信
adb shell dumpsys activity broadcasts | grep senderName=

# 获取手机分辨率
adb shell "dumpsys window | grep mUnrestrictedScreen"
adb shell wm size  # 获取设备屏幕分辨率

# 获取设备的序列号(设备号),有以下两种方式
adb get-serialno
adb shell getprop ro.serialno

# 获取手机的IMEI,有三种方式,由于手机和系统的限制,略有区别
adb shell dumpsys iphonesubinfo其中Device ID即为IMEI号
adb shell getprop gsm.baseband.imei
service call iphonesubinfo 1 # 此种方式,需要自己处理获取的信息得到

# 获取手机mac地址
adb shell cat /sys/class/net/wlan0/address

# 获取手机系统版本
adb shell getprop ro.build.version.release

# 获取手机系统api版本
adb shell getprop ro.build.version.sdk

# 获取手机厂商名称
adb shell getprop ro.product.brand

# 查看指定apk的包名
aapt dump badging +包的全路径

# 查看电池状态
adb shell dumpsys batter

# 重启手机
adb reboot

获取app的Activity和Package的五种方式

https://www.cnblogs.com/upstudy/p/17988145#_label2

Monkey详解

https://www.cnblogs.com/upstudy/p/18653178

adb做hack

adb命令进行中转操作

代替adb.exe文件,中转后再执行adb.bak

# adb进行hack中转处理,打印$$(当前进程id)、获取ppid、获取输入的参数,输出到指定log文件中
echo "# $$ "$(date "+%Y/%m/%d %H:%M:%S")>> C:/InstallSoftware/android-sdk-windows/platform-tools/adb.log
echo "# ppid: $(ps |awk '{print $2}' | tail -1) $(ps |awk '{print $8}' | tail -1)" >> C:/InstallSoftware/android-sdk-windows/platform-tools/adb.log
echo "adb $@" >> C:/InstallSoftware/android-sdk-windows/platform-tools/adb.log
exec C:/InstallSoftware/android-sdk-windows/platform-tools/adb.bak "$@"

问题解决

adb devices找不到设备

  • 模拟器需要设置开启网络桥接
  • 设备需要开启开发者模式
  • 设备需要打开usb调试
posted @ 2024-02-04 21:30  三叔测试笔记  阅读(438)  评论(0)    收藏  举报
返回顶部 跳转底部