您的位置:首页 > 移动开发

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

2018-04-07 01:47 423 查看
一. 使用adb devices 显示已连接的设备二. adb push 和adb install安装Appadb 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 numberb. 然后用adb -s [Serial number] install XXX.apk4. 如果连接有多台手机, 而想安装App到所有手机时,可以用
5. 如果想一次安装多个App到手机, 可以用
三. 使用adb 命令列出已安装包列表1. adb shell pm list package2. 先打开adb shell, 然后su root, 最后ls /data/app
四. 使用adb 命令查找当前活动包与Activityadb 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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Appium ADB