使用ADB与手机应用交互

  应用交互的操作包括:启动应用 / 调起Activity、调起Services、停止Service、发送广播、强行停止应用

基本命令

am <command> 

  常用的command如下:

command 用途
start [options] <INTENT> 启动<INTENT>指定的 Activity
startservice [options] <INTENT> 启动<INTENT>指定的services
broadcast [options] <INTENT> 发送<INTENT>指定的广播
force-stop <packagename> 停止<packgame> 相关的进程

  <INTENT>参数很灵活,和写 Android 程序时代码里的 Intent 相对应。

  用于决定 intent 对象的选项如下:

参数 含义
-a <ACTION> 指定 action,比如android.intent.action.VIEW
-c <CATEGORY> 指定 category,比如android.intent.category.APP_CONTACTS
-n <COMPONENT> 指定完整 component 名,用于明确指定启动哪个 Activity,如com.example.app/.ExampleActivity

  <INTENT>里还能带数据,就像写代码时的 Bundle 一样:

   
参数 含义 --esn <EXTRA_KEY> null 值(只有 key 名)
`-e --es <EXTRA_KEY> <EXTRA_STRING_VALUE>`
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> boolean 值
--ei <EXTRA_KEY> <EXTRA_INT_VALUE> integer 值
--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> component name
--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 # 调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world。
adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

调起Services:

adb shell am startservice [options] <INTENT>

例如:

# 调起微信的某 Service。
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService # 另外一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个
adb shell am startservice -n com.android.systemui/.SystemUIService

停止Service

adb shell am stopservice [options] <INTENT>

发送广播

adb shell am broadcast [options] <INTENT>

  可以向所有组件广播,也可以只向指定组件广播。

  例如

# 向所有组件广播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED # 只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 广播 BOOT_COMPLETED:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

  这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。

  既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:

action 触发时机
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>

# 停止 360 安全卫士的一切进程与服务。
adb shell am force-stop com.qihoo360.mobilesafe

收紧内存:

adb shell am send-trim-memory  <pid> <level>
# pid: 进程 ID level: HIDDEN、RUNNING_MODERATE、BACKGROUND、 RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE # 向 pid=12345 的进程,发出 level=RUNNING_LOW 的收紧内存命令。
adb shell am send-trim-memory 12345 RUNNING_LOW

ADB——应用交互的更多相关文章

  1. [置顶] 应广大童鞋的要求提供一个封装模块,直接和ADB 服务进程交互

    很多童鞋在用ADB 的时候都是直接启动ADB 的进程,然后通过管道的方式获取输出,这样多个线程同时使用ADB 的时候任务管理器一闪一闪的,是不是很不爽啊,原先介绍过可以直接和ADB 服务进程通信,不用 ...

  2. adb forward交互流程

    命令:adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上 或者adb forward tcp:6100 loc ...

  3. python进入adb shell交互模式

    import subprocess #方法一:进入某个环境执行语句(adb shell),注意shell内部命令需要带\n,执行完后一定记得执行exit命令退出,否则会阻塞 obj = subproc ...

  4. ADB——命令大全

    基本语法 基本语法 adb [-d|-e|-s <serialNumber>] <command> # serialNumber表示设备序列号,也可以是ip地址 # 如果只有一 ...

  5. adb学习笔记

    一.adb实现原理 adb的目的是想仅在PC端执行adb操作来获取手机里面的文件或向手机内部发送文件.这是通过Ubuntu中adb操作作为客户端与Ubuntu中运行的adb service交互,Ubu ...

  6. adb,aapt等命令使用

    adb         install/uninstall:安装/卸载手机中的应用.         devices:查看当前连接到电脑中的设备. adb shell         首先运行adb ...

  7. Android之什么是Activity和常用的ADB命令以及Android项目结构的认识

    总结一下之前学习Android的一些内容 一:  Android常用的ADB命令(adb android调试桥)      1.adb devices   查看模拟器设备并重新连接. 2.adb ki ...

  8. Android学习第一天-adb常用命令

    平时开发android应用 的时候,我们都会用到包含在Android SDK中一系列的工具,或许我们通过Eclipse去调用,又或许,我们自己通过打开终端进行手动输入并且执行,下面我们来一起学习下这些 ...

  9. adb 常用命令总结

    1. adb / adb -help 使用帮助 2. adb devices 查看连接到电脑的设备 3. adb install example.apk 安装程序 4. adb -s emulator ...

随机推荐

  1. python数据分析实例(1)

    1.获取数据: 想要获得道指30只成分股的最新股价 import requests import re import pandas as pd def retrieve_dji_list(): try ...

  2. fs.inotify.max_user_watches默认值太小,导致too many open files

    运行环境:centos7.5 linux 打开文件数 too many open files 解决方法fs.inotify.max_user_watches默认值太小,导致too many open ...

  3. [原创]iFPGA-Cable FT2232H JTAG & UART调试器

    iFPGA-Cable FT2232H JTAG & UART调试器 [特性] 采用FT2232H,双通道接口: 支持UART: 支持JTAG,Digilent SMT-1,TCK最大时钟频率 ...

  4. CodeForces - 833B The Bakery

    题解: 线段树经典应用 首先暴力$f[i][j]$表示考虑前i位分成j段的最大值 转移$f[k][j-1]+cost(k+1,i)$枚举k转移 不同数的经典套路就是从它到它前驱这一段 于是维护每个数前 ...

  5. 使用 NPOI 导出 Excel 文件

    [NPOI简介] NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者 ...

  6. sklearn数据库-【老鱼学sklearn】

    在做机器学习时需要有数据进行训练,幸好sklearn提供了很多已经标注好的数据集供我们进行训练. 本节就来看看sklearn提供了哪些可供训练的数据集. 这些数据位于datasets中,网址为:htt ...

  7. Yarn集群的搭建、Yarn的架构和WordCount程序在集群提交方式

    一.Yarn集群概述及搭建 1.Mapreduce程序运行在多台机器的集群上,而且在运行是要使用很多maptask和reducertask,这个过程中需要一个自动化任务调度平台来调度任务,分配资源,这 ...

  8. ISP PIPLINE (六) 3A 综述

    前言: 上一篇文章: ISP PIPLINE (五) Denoise 下一篇文章: (1)3A定义包括什么 Iris:自动光圈,根据环境自动调节光圈. 既然讲到光圈,就先看一下光圈是什么,以及它如何影 ...

  9. [POI2012]Odległość

    [POI2012]Odległość 题目大意: 一个长度为\(n(n\le10^5)\)的序列\(A(1\le A_i\le10^6)\),定义\(d(i,j)\)为每次对\(A_i,A_j\)中的 ...

  10. XVIII Open Cup named after E.V. Pankratiev. GP of Urals

    A. Nutella’s Life 斜率优化DP显然,CDQ分治后按$a$排序建线段树,每层维护凸包,查询时不断将队首弹出即可. 时间复杂度$O(n\log^2n)$. #include<cst ...