adb的常见操作和命令

最近学习adb的时候,整理了一些adb的使用场景,如:adb与设备交互,adb的安装、卸载,adb命令启动,通过命令清除缓存,文件传输和日志操作。

adb的两大作用:在app测试的时候可以提供监控日志方便定位问题,可以进行自动化很多,很多软件可以进行自动化测试都是对adb进行了封装和调用。

1.adb与设备交互

我们在测试app的时候,可以选择真机,也可以选择在模拟器上进行测试,模拟器给我们提供了更大的可选择范围,常用的模拟器如下:

  • Android Studio emulator(官方)
  • Genymotion(依赖网络)
  • mumu,雷电,夜神,逍遥等第三方模拟器(强烈推荐)

1.1.adb连接手机设备

1.1.1.连接模拟器

在这里我们以MuMu模拟器为例来进行连接,在windows上和mac电脑上会有所不同。

windows:

复制代码
adb connect 127.0.0.1:7555    #MuMu的端口是7555,其它模拟器的端口可以看各自官网。

Mac:

复制代码
adb kill-server    #杀掉之后会自动重启然后连接
1.1.2.连接真机

手机通过usb线连接到电脑上,然后手机开启调试模式,在电脑端安装手机驱动。

1.2.adb查看设备状态

1.2.1.查看状态命令

可以通过以下两个命令来查看设备的连接状态。

命令一:

复制代码
adb devices

命令二:

复制代码
adb get-state
1.2.2.设备状态分类:
  • device 正常
  • offline 连接出现异常,设备无响应
  • unauthorized 未授权

2.adb安装卸载应用

2.1.安装

普通安装,命令:adb install <apk路径>,安装包可以在app官网下载或者通过豌豆荚等第三方助手来下载。

比如安装微信:

覆盖安装,命令:adb install -r <apk路径>,覆盖安装会将之前的进行覆盖。

2.2.卸载

2.2.1.卸载命令

卸载应用命令:

复制代码
adb uninstall 包名

卸载应用(不删除配置文件,保存数据缓存信息),命令:

复制代码
adb uninstall -k 包名
2.2.2.查看包名

方式一:

卸载app需要知道app的包名,可以通过如下命令来获得。

复制代码
adb shell
cd /data/data
ls

执行ls命令的时候系统可能会提示:opendir failed, Permission denied。

**解决方法:**在模拟机上开启root权限,然后执行su命令后再进入data/data目录然后执行ls命令。

方式二:

如果安装的是第三方应用可以通过这个命令进行查看。

复制代码
adb shell pm list packages -3

3.adb命令启动页面

3.1.获取页面的activity

3.1.1.已打开页面

命令:

复制代码
adb shell "dumpsys window | grep mCurrentFocus"

如打开的微信页面,然后执行命令可以获取当前页面的名称

3.1.2.动态启动页

动态启动页面可能有多个activity但是实际上只有一个是可用的,直接从当前已打开页面获取的不一定保真,可以通过下面命令获取到所有的,然后进行尝试。

命令:

复制代码
win:adb logcat ActivityManager:I | findstr "cmp"
mac:adb logcat ActivityManager:I | grep "cmp"

例如进入微信注册页面。

3.2.启动页面

命令:

复制代码
adb shell am start -n <包名>/<avticity名>

比如自动打开微信注册页面,使用上面获取到的avticity。

复制代码
adb shell am start -n "com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI"

启动命令报错:

C:\Users\29442>adb shell am start -n "com.tencent.mm/com.tencent.mm.plugin.account.ui.RegByMobileRegAIOUI"
Starting: Intent { cmp=com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.tencent.mm/.plugin.account.ui.RegByMobileRegAIOUI } from null (pid=3579, uid=2000) not exported from uid 10035
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2726)
at com.android.commands.am.Am.runStart(Am.java:875)
at com.android.commands.am.Am.onRun(Am.java:359)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:100)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:259)

解决方法:

复制代码
adb root
adb shell am start -n "com.tencent.mm/com.tencent.mm.plugin.account.ui.RegByMobileRegAIOUI"

4.adb命令清除缓存

复制代码
adb shell pm clear <包名>

5.adb文件传输

  • adb push 电脑路径 设备路径
  • adb pull 设备路径 电脑路径

6.adb日志操作

命令:

复制代码
adb logcat

查看日志常用的参数:

  • adb logcat 打印默认日志数据
  • adb logcat -v time 打印时间
  • adb logcat -v color 使用不同的颜色来显示每个优先级
  • adb logcat -f <filename> 将日志输出到文件
  • adb logcat > log.log 保存日志到PC上
  • adb logcat -c 清理已存在的日志
相关推荐
2501_9160088911 小时前
iOS App 请求地址查看,不用配置看到 App 调了哪些接口
网络协议·计算机网络·网络安全·ios·adb·https·udp
码云数智-园园2 天前
PHP 性能优化实战:从 3s 到 300ms,我是怎么优化一个接口的?
android·adb
2501_915918412 天前
Rust 程序抓包解密,rustls 不认系统证书的几种办法
开发语言·后端·网络协议·ios·adb·https·rust
Free飝Fly2 天前
Android13及更新版本开启user版本adb root remount
adb
阮胜昌2 天前
MySQL 中的动态数据脱敏:无需更改应用程序即可保护敏感数据
android·mysql·adb
hj2862514 天前
mysql
android·adb
易点云徐源4 天前
(已解决)adb devices 不显示设备,但 Windows 的 ADB Interface 正常:一次 WinUSB 与旧版 ADB 兼容性排查实战
windows·adb
夜雪一千4 天前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
clorinda4 天前
MySQL 入门笔记:DQL 基础查询与常用函数
adb
Code额5 天前
基于 SQLAlchemy 2.x,面向 MySQL 数据库的从入门到精通实战教程(2)
数据库·sql·mysql·adb·ai