• 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

             

     

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/zhuminghui/p/10489617.html
Copyright © 2020-2023  润新知