【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基础
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调试
============================= 提升自己 ==========================
进群交流、获取更多干货, 请关注微信公众号:

> > > 咨询交流、进群,请加微信,备注来意:sanshu1318 (←点击获取二维码)
> > > 学习路线+测试实用干货精选汇总:
https://www.cnblogs.com/upstudy/p/15859768.html
> > > 【自动化测试实战】python+requests+Pytest+Excel+Allure,测试都在学的热门技术:
https://www.cnblogs.com/upstudy/p/15921045.html
> > > 【热门测试技术,建议收藏备用】项目实战、简历、笔试题、面试题、职业规划:
https://www.cnblogs.com/upstudy/p/15901367.html
> > > 声明:如有侵权,请联系删除。
============================= 升职加薪 ==========================
更多干货,正在挤时间不断更新中,敬请关注+期待。
进群交流、获取更多干货, 请关注微信公众号:

> > > 咨询交流、进群,请加微信,备注来意:sanshu1318 (←点击获取二维码)
> > > 学习路线+测试实用干货精选汇总:
https://www.cnblogs.com/upstudy/p/15859768.html
> > > 【自动化测试实战】python+requests+Pytest+Excel+Allure,测试都在学的热门技术:
https://www.cnblogs.com/upstudy/p/15921045.html
> > > 【热门测试技术,建议收藏备用】项目实战、简历、笔试题、面试题、职业规划:
https://www.cnblogs.com/upstudy/p/15901367.html
> > > 声明:如有侵权,请联系删除。
============================= 升职加薪 ==========================
更多干货,正在挤时间不断更新中,敬请关注+期待。