Android Debug Bridge(adb)提供了一个Unix Shell,使用这个你可以在一个模拟器或者一个连接设备上面运行各种命令行,这些命令的二进制执行文件时存储在模拟器或者连接设备的文件系统/system/bin/…中。
执行Unix Shell命令的方式有两种:
1、通过adb shell <shell_command>
来执行
adb [-d|-e|-s <serialNumber>] shell <shell_command>
-d 直接发出一个命令到唯一的USB设备上,如果只有一个USB连接的时候,可以使用;如果连接有多个USB设备,将返回一个错误。
-e 直接发出一个命令到唯一的一个正在运行的模拟器上面,如果只有一个正在运行的模拟器,可以使用;如果有多个正在运行的模拟器,将返回一个错误。
-s 直接发出一个命令到一个指定的模拟器或者USB设备实例上面,serialNumber就是指定的设备码,可以通过adb devices得到。
例如:运行ls命令:
adb shell ls
2、使用adb shell进入远程设备shell中
adb [-d|-e|-s <serialNumber>] shell
例如:同样执行ls命令
adb shell
ls
另外可以通过 CTRL+D或者执行命令exit退出远程shell。
在设备的shell中我们可以使用下面两种命令:
使用activity manager(am)
am命令的源码在Am.java中,在shell环境下执行am命令实际是启动一个线程执行Am.java中的主函数(main方法),am命令后跟的参数都会当做运行时参数传递到主函数中,主要实现在Am.java的run方法中。
activity manager (am)工具可以执行各种系统动作,例如:启动一个activity,强制关闭一个进程,广播一个意图,修改设备屏幕属性等等,在设备的shell下面可以执行下面命令:
am <command>
例如:
am start -a android.intent.action.VIEW
下面为可以使用的am命令:
上面的activity manager命令中带有Intent参数,关于Intent参数的指定可以带有下面这些选项:
-a <ACTION>
指定Intent的action,例如:"android.intent.action.VIEW"
-d <DATA_URI>
指定Intent的数据URI,例如:"content://contacts/people/1"
-t <MIME_TYPE>
指定Intent MIME类型,例如: "image/png"
-n <COMPONENT>
指定带有包名前缀的component名来创建隐式intent,例如:"com.example.app/.ExampleActivity"
-f <FLAGS>
给Intent添加flags,等同于setFlags()
--esn <EXTRA_KEY>
添加一个空的extra
-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>
加入可以key-value对的string数据
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>
加入可以key-value对的boolean数据
--ei <EXTRA_KEY> <EXTRA_INT_VALUE>
加入可以key-value对的int数据
--el <EXTRA_KEY> <EXTRA_LONG_VALUE>
加入可以key-value对的long数据
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>
加入可以key-value对的float数据
--eu <EXTRA_KEY> <EXTRA_URI_VALUE>
加入可以key-value对的URI数据
--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>
加入一个component名
--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]
加入一个integers类型数组
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]
加入一个long类型数组
--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]
加入一个float类型数组
--grant-read-uri-permission
包含FLAG_GRANT_READ_URI_PERMISSION标签
--grant-write-uri-permission
包含FLAG_GRANT_WRITE_URI_PERMISSION标签
--debug-log-resolution
包含FLAG_DEBUG_LOG_RESOLUTION标签
--exclude-stopped-packages
包含FLAG_EXCLUDE_STOPPED_PACKAGES标签
--include-stopped-packages
包含FLAG_INCLUDE_STOPPED_PACKAGES标签
--activity-brought-to-front
包含FLAG_ACTIVITY_BROUGHT_TO_FRONT标签
--activity-clear-top
包含FLAG_ACTIVITY_CLEAR_TOP标签
--activity-clear-when-task-reset
包含FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET标签
--activity-launched-from-history
包含FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY标签
--activity-multiple-task
包含FLAG_ACTIVITY_MULTIPLE_TASK标签
--activity-no-animation
包含FLAG_ACTIVITY_NO_ANIMATION标签
--activity-no-history
包含FLAG_ACTIVITY_NO_HISTORY标签
--activity-no-user-action
包含bFLAG_ACTIVITY_NO_USER_ACTION标签
--activity-previous-is-top
包含FLAG_ACTIVITY_PREVIOUS_IS_TOP标签
--activity-reorder-to-front
包含FLAG_ACTIVITY_REORDER_TO_FRONT标签
--activity-reset-task-if-needed
包含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标签
--activity-single-top
包含FLAG_ACTIVITY_SINGLE_TOP标签
--activity-clear-task
包含FLAG_ACTIVITY_CLEAR_TASK标签
--activity-task-on-home
包含FLAG_ACTIVITY_TASK_ON_HOME标签
--receiver-registered-only
包含FLAG_RECEIVER_REGISTERED_ONLY标签
--receiver-replace-pending
包含FLAG_RECEIVER_REPLACE_PENDING标签
--selector
需要使用-d和-t选项去设置intent数据和类型
<URI> <COMPONENT> <PACKAGE>
直接指定 URI, package name, 和 component名
例如:
拨打电话
命令:am start -a android.intent.action.CALL -d tel:电话号码
示例:am start -a android.intent.action.CALL -d tel:10086
打开一个网页
命令:am start -a android.intent.action.VIEW -d 网址
示例:am start -a android.intent.action.VIEW -d http://www.baidu.com
启动一个服务
命令:am startservice <服务名称>
示例:am startservice -n com.android.music/com.android.music.MediaPlaybackService
使用package manager (pm)
package manager (pm)可以执行动作并且查询安装在设备上的应用包,执行命令如下:
pm <command>
例如卸载应用:
pm uninstall com.example.MyApp
pm的相关命令如下:
设备屏幕截图
screencap <filename>
例如:
$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png
设备屏幕录制
screenrecord [options] <filename>
例如:
$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Ctrl-C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4
命令选项:
其他shell命令
执行下面命令,可以列举出所有可用的shell命令:
adb shell ls /system/bin