• ADB——应用交互


    使用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

             

     

  • 相关阅读:
    v-bind绑定属性
    vue 第二次学习笔记 v-once v-html
    P4428-[BJOI2018]二进制【树状数组,set】
    P5180-[模板]支配树
    《架构之美》阅读笔记一
    Python基础04----条件控制
    Tensorflow2.0笔记33——Keras 来搭建神经网络的“八股”套路
    每周总结
    架构漫谈阅读笔记01
    Tensorflow2.0笔记32——卷积神经网络
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/10489617.html
Copyright © 2020-2023  润新知