使用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. Linux 服务器运行健康状况监控利器 Spotlight on Unix 的安装与使用

    1.本文背景 1.1.Linux 服务器情况 # cat /etc/issueRed Hat Enterprise Linux Server release 6.1 (Santiago)Kernel ...

  2. 如何连接LINUX服务器

    1.WINDOW下连接 使用PUTTY连接,链接如下:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 下载安装后打开,运行 ...

  3. ubuntu chrome 无法从该网站添加应用,拓展程序或脚本

    昨天装好ubuntu 18.04 lts版本后,下载了chrome( 版本 68.0.3440.106)和SwitchyOmega,本来计划离线安装,结果提示“无法添加来自此网站的应用.扩展程序和应用 ...

  4. .net core2.x - 关于工作单元(UnitOfWork) 模式

    概要:在搭建框架,顺手说下写下,关于unitofwork,可能你理解了,可能你还不理解,可能与不可能不是重点,重点是感兴趣就看看吧. 1.工作单元(unitofowork)是什么(后面简写uow)? ...

  5. js处理有序列表、js处理无序列表

    有序列表.无序列表 显示id为s下所有的li..隐藏同样 $("#s li").show();

  6. 斯特林公式 ——Stirling公式(取N阶乘近似值)

  7. ant gradle curl等工具原理以及使用记录

    1.ant是早一些的java 项目配置管理工具. 2.gradle是比maven还新的项目配置管理工具. 3.curl可以方便进行网络测试.curl可以方便用来http请求测试,支持各种命令,从这个角 ...

  8. (DP) 关于最优三角剖分

    https://www.cnblogs.com/Konjakmoyu/p/4905563.html 这个人写的好 最优三角剖分的核心思想: 确定决策顺序. 有时一个解可以用许多决策顺序得出, 这时候我 ...

  9. PBRT笔记(4)——颜色和辐射度

    SPD 光谱功率分布 CoefficientSpectrum 根据给定采样数表示光谱,为RGBSpectrum.SampledSpectrum的父类. 重载大量的基础代码,比较简单不做赘述.其中为了方 ...

  10. vector, map, queue,set常用总结

    #include<bits/stdc++.h> using namespace std; vector<,); 定义一个大小为9,初始化全是1的vector数组 set<int ...