[持续更新中]自动化测试中经常使用到的adb 命令

一. 使用adb devices 显示已连接的设备
二. adb push 和adb install安装App
adb push和adb install是apk包安装的两种方法,用法如下:
  1. adb push XXX.apk /你想推送的路径
  2. adb install XXX.apk
  显而易见,两者的区别是,adb push可以自定义推送路径,adb install 只能安装在/data/app文件下。
  其次,adb push 是将apk包复制到路径下面,重启后/system/app和/data/app下的apk包都会自动安装。
  adb install是将apk安装到手机里,流程是:
  复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录(so文件也在./包名/lib下,或者/data/app-lib/包名)。
  另外,install复制APK安装包到data/app目录下的过程中,会将apk名改为包名-1.apk,数字为android接收到的版本号。
  其中对于/system文件夹比较容易碰到的问题是报read only file的错误,哪怕/system已经被你改成了777的权限,解决的方法是:1.adb shell 2.su 3.mount -o remount rw /system重新挂载一下/system文件系统
3. 如果连接有多台手机, 而想指定安装App到具体某一台手机时,可以用:
a. 先用 adb devices 获得对应手机的Serial number
b. 然后用 adb -s [Serial number] install XXX.apk
4. 如果连接有多台手机, 而想安装App到所有手机时,可以用

5. 如果想一次安装多个App到手机, 可以用

三. 使用adb 命令列出已安装包列表
1. adb shell pm list package
2. 先打开adb shell, 然后 su root , 最后 ls /data/ app

四. 使用adb 命令查找当前活动包与Activity
adb shell dumpsys window w | findstr \/ | findstr name=
例: 打开Android自带的计算器, 使用上面的命令会显示:
mSurface=Surface(name=com.android.calculator2/com.android.calculator2.Calculator)
其中 com.android.calculator2是包的名字, Calculator是启动用的Activity

但实际上有些App有使用多个Activity, 所以启动时所用的Activity并不等于成功启动后的Activity, 这时候就需要在adb shell中持续监视App整个启动时所使用过的Activity了,命令如下:
adb shell dumpsys activity activities
例: 如下面的输出:

Running activities (most recent first):
TaskRecord{a91e4ea8 #30 A=com.parknshop.parknshopapp U=0 sz=1}
Run #0: ActivityRecord{a956a6e8 u0 com.parknshop.parknshopapp/parknshop.parknshopapp.OneActivity t30
mResumedActivity: ActivityRecord{a956a6e8 u0 com.parknshop.parknshopapp/parknshop.parknshopapp.OneActivity t30}
mLastPausedActivity: ActivityRecord{a9485f18 u0 com.parknshop.parknshopapp/parknshop.parknshopapp.StartupActivity t30 f}
mFocusedActivity: ActivityRecord{a956a6e8 u0 com.parknshop.parknshopapp/parknshop.parknshopapp.OneActivity t30}
mDismissKeyguardOnNextActivity=false
mFocusedStack=ActivityStack{a95ed6e8 stackId=16, 1 tasks} mStackState=STACK_STATE_HOME_IN_BACK
mSleepTimeout=false
mCurTaskId=30
mUserStackInFront={}
Recent tasks:
* Recent #0: TaskRecord{a91e4ea8 #30 A=com.parknshop.parknshopapp U=0 sz=1}
numActivities=1 rootWasReset=true userId=0 mTaskType=0 numFullscreen=1 mOnTopOfHome=true
affinity=com.parknshop.parknshopapp
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.parknshop.parknshopapp/parknshop.parknshopapp.StartupActivity bnds=[564,1439] [786,1715]}
realActivity=com.parknshop.parknshopapp/parknshop.parknshopapp.StartupActivity
Activities=[ActivityRecord{a956a6e8 u0 com.parknshop.parknshopapp/parknshop.parknshopapp.OneActivity t30}]
askedCompatMode=false
lastThumbnail=null lastDescription=null
lastActiveTime=83286140 (inactive for 7s)

Running activities (most recent first)mFocusedActivity后面的表示正在屏幕上显示的Activity, 而 Recent tasks下面的第一个 Recent #0(表示刚运行完)里, 显示 realActivity=com.parknshop.parknshopapp/parknshop.parknshopapp.StartupActivity, 这样表明实际上这个App刚启动时使用的Activity是一个叫 StartupActivity的,然后切换到 OneActivity进行正常使用, 当然如果Recent #1, #2都是同一个包的话,那么可能启动这个App会经过更加多的Activity之后才到达正常显示的这个Activity

在Android 7.0 之后可以 " adb shell "cmd package resolve-activity --brief [包名] | tail -n 1" 来获得一个App的默认Activity


五. 使用exit退出adb shell

六. 使用adb 命令远程调试
1. 首先要将手机用USB线连接电脑, 然后输入ADB命令 "adb [-s 你手机的serial number] tcpip [port]" 来打开手机的远程调试端口
2. 然后使用ADB命令 "adb connect [ip:port]" 来连接要调试的手机,注意这里不再需要-s 选项
3. 要注意某些手机的开发者选项里有子选项可以限制adb 安装应用或者控制输入, 如果有,请关闭这些限制

七. 使用adb 命令向设备输入文字
1. 由于Appium中的send_key与set_value方法各有各的问题,所以有些时候需要直接使用adb 命令向测试设备输入文字
2. 具体命令为 adb [-s 你手机的serial number] shell input text "[要输入的内容]", 要输入的内容一定要用单引号' ' 或者 双引号" "包围起来
3. 由于ADB命令是一个linux like的指令集,所以在输入内容中有一些特殊符号, 比如", ', `, &, <, > 这些,会被当作是功能符号而转义, 可以使用单引号把特殊字符包围起来,比如"You '&' me", 又或者用两个\\, 比如\\"代表输入一个"到测试设备中

八. 使用adb 命令关闭所有后台App
1. 由于这个ADB命令的作用是关闭后台进程,如果想连当前测试App都关闭,就要先发送一个Home键把所有App都放到后台先
2. 再使用" adb [-s 你手机的serial number] shell am -kill-all"
3. 这个ADB命令的作用与很多国产机任务列表里关闭所有App的操作很像

九. 使用adb 命令关闭指定App
1. 这个命令与在App中的退出的效果是一样的,如果需要真正退出App而不是假退出,或者可以用上一个命令
2. 具体命令为" adb [-s 你手机的serial number] shell am force-stop [App的包名]"

十. 使用adb 命令强制关闭App并清除数据
1. 这个ADB的作用是强制关闭App并清除App的所有数据
2. 命令为" adb [-s 你手机的serial number] shell pm clear [App的包名]"
3. 这个ADB 命令与打开"设置->应用管理->删除数据 + 清空缓存" 的作用类似

十一. 使用adb 获取系统版本与API版本
1. 获取系统版本 " adb shell getprop ro.build. version .release"
2. 获取API版本 " adb shell getprop ro.build.version.sdk"

十二. 使用adb截屏
1. 使用adb 截屏 " adb shell screencap -p /sdcard/screen.png "
2. 使用adb 录屏 " adb shell screenrecord /sdcard/screenrec.mp4 "
3. 从设备将截屏或屏幕录像取回" adb pull -p -a /sdcard/screen.png(或者screenrec.mpt) d:\screencapture\ " 要注意要至少指定一个文件件, 如果指定文件名,获取后的文件自动改名
4. 从设备删除截屏或录屏" adb shell rm /sdcard/screen.png "
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值