赞
踩
最近学习adb的时候,整理了一些adb的使用场景,如:adb与设备交互,adb的安装、卸载,adb命令启动,通过命令清除缓存,文件传输和日志操作。
adb的两大作用:在app测试的时候可以提供监控日志方便定位问题,可以进行自动化很多,很多软件可以进行自动化测试都是对adb进行了封装和调用。
我们在测试app的时候,可以选择真机,也可以选择在模拟器上进行测试,模拟器给我们提供了更大的可选择范围,常用的模拟器如下:
在这里我们以MuMu模拟器为例来进行连接,在windows上和mac电脑上会有所不同。
windows:
adb connect 127.0.0.1:7555 #MuMu的端口是7555,其它模拟器的端口可以看各自官网。
Mac:
adb kill-server #杀掉之后会自动重启然后连接
手机通过usb线连接到电脑上,然后手机开启调试模式,在电脑端安装手机驱动。
可以通过以下两个命令来查看设备的连接状态。
命令一:
adb devices
命令二:
adb get-state
普通安装,命令:adb install <apk路径>,安装包可以在app官网下载或者通过豌豆荚等第三方助手来下载。
比如安装微信:
覆盖安装,命令:adb install -r <apk路径>
,覆盖安装会将之前的进行覆盖。
卸载应用命令:
adb uninstall 包名
卸载应用(不删除配置文件,保存数据缓存信息),命令:
adb uninstall -k 包名
方式一:
卸载app需要知道app的包名,可以通过如下命令来获得。
- adb shell
- cd /data/data
- ls
执行ls命令的时候系统可能会提示:opendir failed, Permission denied。
解决方法:在模拟机上开启root权限,然后执行su命令后再进入data/data目录然后执行ls命令。
方式二:
如果安装的是第三方应用可以通过这个命令进行查看。
adb shell pm list packages -3
命令:
adb shell "dumpsys window | grep mCurrentFocus"
如打开的微信页面,然后执行命令可以获取当前页面的名称
动态启动页面可能有多个activity但是实际上只有一个是可用的,直接从当前已打开页面获取的不一定保真,可以通过下面命令获取到所有的,然后进行尝试。
命令:
- win:adb logcat ActivityManager:I | findstr "cmp"
- mac:adb logcat ActivityManager:I | grep "cmp"
例如进入微信注册页面。
命令:
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"
adb shell pm clear <包名>
adb push 电脑路径 设备路径
adb pull 设备路径 电脑路径
命令:
adb logcat
查看日志常用的参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。