使用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. cf1154G 埃氏筛应用

    直接用埃氏筛也可以做,但是这题写起来有点恶臭.. 更加简单的写法是直接枚举gcd=k,然后里面再枚举一次i*k,即找到k两个最小的倍数,看起来复杂度很高,但其实也是埃氏筛的复杂度 因为每次枚举gcd, ...

  2. get方法与post方法的区别与js获取url参数的方式

    1.get方法与post方法的区别: 区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据:区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于UR ...

  3. python第10天(上)

    multiprocessing包是Python中的多进程管理包.与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程.该进程可以运行在Py ...

  4. [转] Brook 搭建教程

    https://www.jiongjun.cc/technology/500.html 在搭建 brook 代理之前,首先要求你要有一台国外 vps,关于国外 vps 选择,可以参考这篇:推荐几款国外 ...

  5. Javascript 精简语法介绍

    1. 取整同时转成数值型: '10.567890'|0 结果: 10 '10.567890'^0 结果: 10 -2.23456789|0 结果: -2 ~~-2.23456789 结果: -2 2. ...

  6. python输入

    (程序是如何输入输出的) 先了解一个概念,什么是函数? 简单来说,函数就是封装了一些功能,到时候只需要写一个函数名字,就可以使用这些功能 input函数,它是输入函数,它可以将用户输入的内容当做“字符 ...

  7. Fiddler工具使用介绍

    Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改. 代理就是在 ...

  8. C++ vector的用法(整理)

    vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器.vector 是C++ STL的一个重要成员,使用它时需要包含头文件: #include<vector>; ...

  9. windows安装nexus3

    1.下载nexus3 https://www.sonatype.com/download-oss-sonatype 2.解压文件D:\javatool\ 3.在path中配置环境变量 D:\javat ...

  10. arcgis中转换netCDF为栅格数据

    最近有个同学询问我一个问题,使用arcpy把netcdf转化成栅格文件,忙活了两个小时才搞定,其实主要代码非常简单,只不过要对arcgis 的功能比较熟悉(其实多思考和查考它的帮助文章,无聊) # - ...