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 清理已存在的日志
相关推荐
mldlds1 小时前
MySQL四种备份表的方式
mysql·adb·oracle
我不听你讲话5 小时前
第 2 章 MySQL 数据库操作
数据库·mysql·adb
熬夜的咕噜猫19 小时前
MySQL 核心数据库操作
adb
Yang-Never21 小时前
ADB ->adb shell perfetto 抓取 trace 指令
android·开发语言·adb·android studio
轩情吖1 天前
MySQL之事务管理
android·后端·mysql·adb·事务·隔离性·原子性
赶路人儿2 天前
常见的mcp配置
android·adb
ego.iblacat2 天前
MySQL 数据库操作
数据库·mysql·adb
路溪非溪2 天前
adb的安装和基本使用总结
adb
XDHCOM2 天前
MySQL报错LDAP认证初始化连接池失败,远程修复思路和故障排查分享
数据库·mysql·adb
闻哥2 天前
深入理解 MySQL InnoDB Buffer Pool 的 LRU 冷热数据机制
android·java·jvm·spring boot·mysql·adb·面试