一、adb命令和adb shell命令的区别

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

二、一些常用的adb shel命令简介

pm

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

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

l  pm list package 列出安装在设备上的应用

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

    adb shell pm list package

    -s:列出系统应用

    adb shell pm list package -s

    -3:列出第三方应用

    adb shell pm list package -3

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

    adb shell pm list package -f

    -i:列出应用包名及其安装来源,结果显示例子:

    adb shell pm list package -i

    命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用

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

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

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

    adb shell pm path com.tencent.mobileqq

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

l  pm dump , 后跟包名,列出指定应用的 dump 信息,里面有各种信息,自行查看

    adb shell pm dump com.tencent.mobileqq

l  pm install , 安装应用

   目标 apk 存放于 PC 端,请用 adb install 安装

   目标 apk 存放于 Android 设备上,请用 pm install 安装

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

l  pm clear , 清除应用数据

l  pm set-install-location , pm get-install-location , 设置应用安装位置,获取应用安装位置

   [0/auto]:默认为自动

   [1/internal]:默认为安装在手机内部

   [2/external]:默认安装在外部存储

am

am 源码 Am.java

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

   启动相机

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

   先停止目标应用,再启动

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

   等待应用完成启动

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

   启动默认浏览器打开一个网页

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

   启动拨号器拨打 10086

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

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

l  am monitor , 监控 crash 与 ANR

    adb shell am monitor

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

l  am startservice , 启动一个服务

l  am broadcast , 发送一个广播

input

这个命令可以向 Android 设备发送按键事件,其源码 Input.java

l  input text , 发送文本内容,不能发送中文

    adb shell input text test123456

    前提先将键盘设置为英文键盘

l  input keyevent , 发送按键事件,KeyEvent.java

    adb shell input keyevent KEYCODE_HOME

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

    adb shell input tap 500 500

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

l  input swipe , 滑动事件

    adb shell input swipe 900 500 100 500

    从右往左滑动屏幕

    adb shell input swipe 500 500 501 501 2000

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