原文地址:Most complete ADB command manual
作者:larson
书接上文
与应用程序交互
主要使用am <command>命令,常用的<command>如下:
| 命令 | 使用 |
|---|---|
start [options] <INTENT> | 启动制定的活动<INTENT> |
<startservice> [options] <INTENT> | 启动指定的服务<INTENT> |
<broadcast> [options] <INTENT> | 发送指定的广播<INTENT> |
force-stop <packagename> | 停止<packagename>相关进程 |
<INTENT>参数非常灵活,和编写Android程序时代码中的Intent相对应。
用于确定意图对象的选项如下:
| 参数 | 意义 |
|---|---|
-a <ACTION> | 指定操作,例如android.intent.action.VIEW |
-c <CATEGORY> | 指定类别,例如android.intent.category.APP_CONTACTS |
-n <COMPONENT> | 指定完整的组件名称,用于明确指定要启动哪个Activity,例如com.example.app/.ExampleActivity |
<INTENT>也可以携带数据,就像写代码的Bundle一样:
| 参数 | 意义 |
|---|---|
--esn <EXTRA_KEY> | 空值(仅键名) |
| `-e | --es <EXTRA_KEY> <EXTRA_STRING_VALUE> |
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> | 布尔值 |
--ei <EXTRA_KEY> <EXTRA_INT_VALUE> | 整数值 |
--el <EXTRA_KEY> <EXTRA_LONG_VALUE> | long值 |
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> | float值 |
--eu <EXTRA_KEY> <EXTRA_URI_VALUE> | URI |
--ecn <EXTRA-KEY> <EXTRA_COMPONENT_NAME_VALUE | 组件名称 |
eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...] | integer数组 |
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] | long数组 |
激活Activity
命令格式:
adb shell am start [options] <INTENT>
例如:
adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示激活了微信的主界面
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity -es "toast" "hello, world"
意思是调用org.mazhuang.boottimemeasure/.MainActivity,把字符串数据值对toast hello, world传递给它。
接送Service
命令格式:
adb shell am startservice [options] <INTENT>
例如:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuth
表示微信某项服务已经开通。
发送广播
命令格式:
adb shell am broadcast [options] <INTENT>
它可以广播给所有组件,也可以自后广播给指定的组件。
例如,向所有组件广播BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
在比如,只向org.mazhuang.boottimemeasure/.BootCompletedReciver广播BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.bottimemeasure/.BootCompletedReceiver
这种用法在测试的时候很实用,比如一个广播场景很难制作出来,可以考虑用这种方式发送广播,既可以发送系统预定义的广播,也可以发送自定义的广播,下面是部分系统预定义广播及正常触发时序:
| 行动 | 触发时机 |
|---|---|
| android.net.conn.CONNECTIVITY_CHANGE | 网络连接已改变 |
| android.intent.action.SCREEN_ON | 屏幕亮起 |
| android.intent.action.SCREEN_OFF | 屏幕熄灭 |
| android.intent.action.BATTERY_LOW | 如果电池电量低,会弹出低电量提示框 |
| android.intent.action.BATTERY_OKAY | 电池已恢复 |
| android.intent.action.BOOT_COMPLETED | 设备已启动 |
| android.intent.action.DEVICE_STORAGE_LOW | 存储空间太低 |
| android.intent.action.DEVICE_STORAGE_OK | 存储空间恢复 |
| android.intent.action.PACKAGE_ADDED | 安装了新应用程序 |
| android.net.wifi.STATE_CHANGE | WiFi连接状态已改变 |
| android.net.wifi.WIFI_STATE_CHANGED | WiFi状态更改为启用/禁用/正在启动/正在禁用/未知 |
| android.intent.action.BATTERY_CHANGED | 电池电量已发生变化 |
| android.intent.action.INPUT_METHOD_CHANGED | 系统输入法已改变 |
| android.intent.action.ACTION_POWER_CONNECTED | 外部电源连接 |
| android.intent.action.ACTION_POWER_DISCONNECTED | 外部电源断开 |
| android.intent.action.DREAMING_STARTED | 系统开始休眠 |
| android.intent.action.DREAMING_STOPPED | 系统停止休眠 |
| android.intent.action.WALLPAPER_CHANGED | 壁纸已更改 |
| android.intent.action.HEADSET_PLUG | 插入耳机 |
| android.intent.action.MEDIA_UNMOUNTED | 卸载外部媒体 |
| android.intent.action.MEDIA_MOUNTED | 安装外部媒体 |
| android.os.action.POWER_SAVE_MODE_CHANGED | 启用省电模式 |
(以上广播都可以通过adb触发)
强行停止应用程序
命令
adb shell am force-stop <packagename>
命令示例:
adb shell am force-stop com.qihoo360.mobilesafe
表示停止360安全卫士的所有进程和服务
禁用应用程序并启动
命令示例:
adb shell pm disable-user <packagename>
adb shell pm disable <packagename>
adb shell pm disable-user [options] <packagename>
命令示例:
adb shell pm enable <packagename>
撤销应用程序权限
1.向应用授予权限。仅可授予应用声明的可选权限
adb shell pm grant <packagename> <PACKAGE_PERMISSION>
例如:
adb -d shell pm grant packagename android.permission.BATTERY_STATUS
- 取消应用授权
adb shell pm revoke <packagename> <PACKAGE_PERMISSION>
选项 --user user_id: the user to be disabled.
例如,向应用程序授予权限。在运行Android 6.0(API级别23)及更高版本的设备上,该权限可以是应用程序清单中声明的任何权限。在运行Android 5.1 (API级别22)及更低版本的设备上,它必须是应用程序定义的可选权限。