Android 常用 adb 命令总结

Android Debug Bridge

     adb其实就是Android Debug Bridge,Android调试桥的缩写,adb是一个C/S架构的命令行工具,主要由3部分组成:

        (1)运行在PC端的Client:可以通过它对Android应用进行安装、卸载及调试。

            1.Eclipse中的ADT、SDK Tools目录下的DDMS、Monitor等工具,都是同样地用到了adb的功能来与Android设备进行交互。

            2.PC端的手机助手,诸如360手机助手、豌豆荚、应用宝等,其除了安装第三方应用方便,其他的功能,基本上都可以通过adb命令完成,建议测试人员尽量不要在电脑上安装这类手机助手,因为其自带的adb程序可能会与Android SDK下的adb程序产生冲突,5037端口被占用,导致使用adb命令时无法连接到设备。

      (2)运行在PC端的Service:其管理客户端到Android 设备上adb后台进程的连接

          adb服务启动后,Windows可以在任务管理器中找到adb.exe这个进程

      (3)运行在Android设备上的adb后台进程

          执行 adb shell ps | grep adb ,可以找到该后台进程,windows请使用findstr替代grep

     这里注意,adb使用的端口号,5037。


adb命令

     在开发者测试的过程中,我们可以通过adb来管理多台设备,其一般的格式为:

      adb[-e|-d|-s<设备***>]<子命令>

      在配好环境变量的前提下,在命令窗口当中输入adb help或者直接输入adb,将会列出所有的选项说明及子命令。

      一些常用的命令:

            adb devices:获取设备列表及设备状态

            adb get-state:获取设备的状态。设备的状态有三种,分别为device,office,unknown

  1.                 device:设备正常连接

  2.                 offline:连接出现异常,设备无响应

                unknown:没有连接设备


            adb kill-server,adb start-server,结束adb服务和启动adb服务,通常两个命令一起用。一般在连接出现异常,使用adb devices来正常列出设备,设备状态异常时使用kill-server,ranhou yunxing start-server进行重启服务

         adb logcat,打印Android的系统日志,以后单独讲。------------------(1)

         adb bugreport,打印 dumpsys、dumpstate、logcat的输出,也是用于分析错误,输出比较多,建议重定向到一个文件中。

                 adb bugreport >d:\bugreport.log

         adb install,安装应用,覆盖安装是使用-r选项。windows下乳沟需要安装含有中文名的apk,需要对adb进行修改,百度可以找到做出修改的adb,支持中文命令的apk。-------------------------(2)

         adb uninstall,卸载应用,后面跟的参数是应用的包名,区别于apk文件名

                adb uninstall -k ,卸载时保存数据和缓存目录

         adb pull,将Android 设备上的文件或者文件夹复制到本,例如复制sdcard下的pull.txt文件到D盘:

                adb pull sdcard/pull.txt d:\

         如果需要重命名为rename.txt,则为:

                adb pull sdcard/pull.txt d:\rename.txt

         注意权限,复制系统权限的目录下的文件需要root,并且一般的Android机root后并不能使用命令去复制,而需要在手机上使用类似于RE的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复制移动系统文件,这里推荐使用小米手机的开发版本,IUNI也不错。

         adb push,推送本地文件至Android设备,例如推送D盘下的push.txt至SDcard:

                 adb push d:\push.txt sdcard/

         sdcard后面的斜杠不能少,否则会出现下面的错误:

                 failed to copy 'push.txt' to 'sdcard':Is a directory

         权限问题同pull命令。

         adb root,adb remount只针对类似小米开发板的手机有用,可以直接以这两个命令获取root权限,并挂载系统文件系统为可读写状态。

         adb reboot,重启Android设备

                 bootloader,重启设备,进入fastboot模式,同adb reboot-bootloader命令

                 recovery,重启设备,进入recovery模式,经常刷机的同学比较熟悉这个模式

          adb forward,将宿主机上的某个端口重定向到设备的某个端口

                 adb forward top:1314 top:8888

          执行该命令后所有发往宿主机1314端口的消息、数据都会转发到Android 设备的8888端口上,因此可以通过远程的方式控制Android设备。

          adb connect 远程连接Android设备:

                  手机、PC处于相同的网络下,手机root,安装应用adbWireless,启动应用后点击界面中间的按钮:

                  

                  接着运行 adb connect 192.168.1.102,即可通过无线的方式连接手机,缺点是速度比较慢。可以测试电量消耗。




adb shell 命令

       adb命令和adb shell命令的区别是什么?adb命令时adb这个程序自带的一些命令,而adb shell则是调用的Android系统中的命令,这些Android特有的命令都放在了Android设备的system/bin目录下。

   pm

       Package Manager,可以用来获取到一些安装在Android设备上的应用信息

       pm的源码pm.java-------(3),直接运行adb shell pm 可以获取到该命令的帮助信息

           pm list package列出安装再设备上的应用:

                1)不带任何选项:列出所有的应用的包名:

                       adb shell pm list package

                2)-s:列出系统应用

                       adb shell pm list package -s 

                3)-3:列出第三方应用

                       adb shell pm list package -3

                4)-f:列出应用包名及对应的apk名及存放位置

                       adb shell pm list package -f

                5)-i:列出应用包名及其安装来源

                       adb shell pm list package -i

                例如:package:com.zhihu.android installer=com.xiaomi.market  

               6)参数组合使用,例如查找三方应用中知乎的包名、apk存放位置、安装来源:

                       adb shell pm list package -f -3 -i zhihu

                  package:/data/app/com.zhihu.android-1.apk=com.zhihu.android  installer=com.xiaomi.market

             

           pm path 列出对应包名的.apk位置:

                      adb shell pm path com.tencent.mobileqq

                  package:/data/app/com.tencent.mobileqq-1.apk

           

           pm list instrumentation,列出含有单元测试case的应用,后面可跟参数-f(与pm list package中的一样),以及[TARGET-PACKAGE]

           

         pm dump,后跟包名,列出指定应用的dump信息,里面有各种信息:

                      adb shell pm dump com.tencent.mobileqq

                        Packages:                         Package [com.tencent.mobileqq] (4397f810):                         userId=10091 gids=[3003, 3002, 3001, 1028, 1015]                         pkg=Package{43851660 com.tencent.mobileqq}                         codePath=/data/app/com.tencent.mobileqq-1.apk                         resourcePath=/data/app/com.tencent.mobileqq-1.apk                         nativeLibraryPath=/data/app-lib/com.tencent.mobileqq-1                         versionCode=242 targetSdk=9                         versionName=5.6.0                         applicationInfo=ApplicationInfo{43842cc8 com.tencent.mobileqq}                         flags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ]                         dataDir=/data/data/com.tencent.mobileqq                         supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]                         usesOptionalLibraries:                         com.google.android.media.effects                         com.motorola.hardware.frontcamera                         timeStamp=2015-05-13 14:04:24                         firstInstallTime=2015-04-03 20:50:07                         lastUpdateTime=2015-05-13 14:05:02                         installerPackageName=com.xiaomi.market                         signatures=PackageSignatures{4397f8d8 [43980488]}                         permissionsFixed=true haveGids=true installStatus=1                         pkgFlags=[ HAS_CODE ALLOW_CLEAR_USER_DATA ]                         User 0:  installed=true blocked=false stopped=false notLaunched=false enabled=0                         grantedPermissions:                         android.permission.CHANGE_WIFI_MULTICAST_STATE                         com.tencent.qav.permission.broadcast                         com.tencent.photos.permission.DATA                         com.tencent.wifisdk.permission.disconnect


              pm install,安装应用。目标apk存放与PC端,用adb install安装。目标apk存放于Android设备上,用pm install安装

      

              pm uninstall,卸载应用,同adb uninstall,后面跟的参数都是应用的包名


              pm clear,清除应用数据


              pm set-install-location,pm get-install-location,设置应用安装位置,获取应用安装位置。[0/auto]:默认为自动,[1/internal]:默认为安装在手机内部,[2/external]:默认安装在外部存储。


  am

     am 源码 am.java----------(4)

              am start,启动一个Activity,以启动系统相机应用为例:

                   1)启动相机:

                     adb shell am start -n com.android.camera/.Camera

                     Starting: Intent { cmp=com.android.camera/.Camera }

                   2)先停止目标应用,再启动:

                     adb shell am start -S com.android.camera/.Camera

                     Stopping: com.android.camera                        Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]                       cmp=com.android.camera/.Camera }

                   3)等待应用完成启动:

                     adb shell am start -W com.android.camera/.Camera

                     Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]                           cmp=com.android.camera/.Camera }                        Status: ok                        Activity: com.android.camera/.Camera                        ThisTime: 500                        TotalTime: 500                        Complete

                   4)启动默认C页:

                      adb shell am start -a android.intent.action.VIEW -d http://testerhome.com

                      Starting: Intent { act=android.intent.action.VIEW dat=http://testerhome.com

                   5)启动拨号器拨打10086

                      adb shell am start -a android.intent.action.CALL -d tel:10086

                      Starting: Intent { act=android.intent.action.CALL dat=tel:xxxxx }

    

               am instrument,启动一个instrumention,单元测试或者Robotium会用到

               

               am monitor,监控crash与ANR

                      adb shell am monitor

                      Monitoring activity manager...  available commands:                         (q)uit: finish monitoring                         ** Activity starting: com.android.camera

 

                am force-stop,后跟包名,结束应用

   

                am startsevice,启动一个服务

 

                am broadcast,发送一个广播




 input

         这个命令可以向Android设备发送按键事件,源码为Input.java------(6)

             input text,发送文本内容,不能发送中文,前提先将键盘设置为英文键盘:

                   adb shell input text test123456


            input keyevent,发送按键事件,KeyEvent.java ------------(7)

                   adb shell input keyevent KEYCODE_HOME

            以上为模拟按下Home键,源码里面有定义:

                   public static final int KEYCODE_HOME=3

            因此可以将命令中的KEYCODE_HOME 替换为3

                   adb shell input keyvent 3


            input tap,对屏幕发送一个触摸事件:

                   adb shell input tap 500 500

            以上为点击屏幕上坐标为 500 500的位置

            

            input swipe,滑动事件:

                    adb shell input swipe 900 500 100 500

            以上为从右往左滑动屏幕,如果版本不低于4.4,可以模拟长按事件:

                    adb shell input swipe 500 500 501 501 2000

            其实就是在小的距离内,在较长的持续事件内进行滑动,最后表现出来的结果就是长按动作。

            到这里会发现,MonkeyRunner 能做到的事情,通过 adb 命令都可以做得到,如果进行封装,会比 MR 做得更好。

        screencap

                       截图命令,截屏,保存至sdcard目录:

                                         adb shell screencap -p /sdcard/screen.png

        screenrecord

                        4.4新增的录制命令:

                                          adb shell screenrecord sdcard/record.mp4

                        执行命令后操作手机,crtl+c结束录制,录制结果保存至sdcard

     uiautomator

            执行UI automation tests,获取当前界面的控件信息。

                 runtest:executes UI automation tests,RunTestCommand.java   --------------(8)

                 dump:获取控件信息:DumpCommand.java     -------------------(9)

                      adb shell uiautomator dump

                      UI hierchary dumped to: /storage/emulated/legacy/window_dump.xml

                  不加[file]选项时,默认存放在sdcard下

     ime

                                   输入法,Ime.java-------------------(10)

                                   列出设备上的输入法:

                                              adb shell ime list -s

                                    com.google.android.inputmethod.pinyin/.PinyinIME                     com.baidu.input_mi/.ImeService 

                                     选择输入法:

                                                adb shell ime set com.baidu.input_mi/.ImeService

                                      Input method com.baidu.input_mi/.ImeService selected


       wm

                 wm.java---------(11)

                      获取设备分辨率:

                             adb shell wm size

                       Physical size: 1080x1920

     monkey、settings、dumpsys------------(12)

    log

               这个命令可以在logcat里面打印你设定的信息。

                         adb shell log -p d -t xuxu "test adb shell log"

                -p:优先级,-t:tag:标签,后面加上message

                         adb logcat -v time -s xuxu

                --------- beginning of /dev/log/system                  --------- beginning of /dev/log/main                  05-15 13:57:10.286 D/xuxu    (12646): test adb shell log  

      getprop

                查看Android设备的参数信息,只运行 adb shell getprop,结果以key:value键值对的形式显示,如果获取某个key的值:

                         adb shell getprop ro.buld.version.sdk

                以上为获取sdk的版本。