Android开发日常之adb

学无止境,有一技旁身,至少不至于孤陋寡闻。
随着我们工作阅历的提升,除了基本的业务开发,也需要提升我们自身在开发效能方面的一些储备与笔记。

Android开发日常之gradle
Android开发日常之adb
Android开发日常之git
Android开发日常之shell alias

adb的全称为Android Debug Bridge,通过adb可以方便我们调试Android程序。作为开发人员,掌握所需要的adb操作命令是非常必须的,就把平时工作中用得相对比较多的adb命令做个梳理。(日常中把adb操作命令搭配shell alias使用起来更方便)

ADB常用命令

  1. 启动/停止adb server命令

    adb start-server  //启动命令
    adb kill-server   //停止命令
    
  2. 查询已连接设备/模拟器
    adb devices

  3. adb连接设备命令
    adb [-d|-e|-s ]
    如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s ] 这一部分,直接使用 adb即可 。
    如果有多个设备/模拟器连接,则需要为命令指定目标设备。

    参数 含义
    -d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
    -e 指定当前唯一运行的模拟器为命令目标
    -s <serialNumber> 指定相应 serialNumber 号的设备/模拟器为命令目标

    在多个设备/模拟器连接的情况下较常用的是-s参数,serialNumber 可以通过adb devices命令获取。如:

    $ adb devices
    List of devices attached
    cfxxxxxx device
    emulator-5554    device
    10.xxx.xxx.x:5555    device
    

    输出里的 cfxxxxxx、emulator-5554 和 10.xxx.xxx.x:5555 即为 serialNumber。
    比如这时想指定 cfxxxxxx 这个设备来运行 adb 命令
    获取屏幕分辨率:

    adb -s cfxxxxxx shell wm size
    

    安装应用:

    adb -s cfxxxxxx install hello.apk
    

    遇到多设备/模拟器的情况均使用这几个参数为命令指定目标设备。

  4. 安装 APK
    命令格式:

    adb install [-rtsdg] <apk_path>
    

    参数:
    adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:

    参数 含义
    -r 允许覆盖安装
    -t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用
    -s 将应用安装到 sdcard
    -d 允许降级覆盖安装
    -g 授予所有运行时权限
  1. 卸载应用
    adb uninstall [-k] <packagename>
    
    <packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。
    adb uninstall com.xxx.xxx
    
  2. 查看前台 Activity
    adb shell dumpsys activity activities | grep ResumedActivity
    
    查看栈顶activity
    adb shell dumpsys activity
    ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents)
    ...
    ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)
    ...
    ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers)
    ...
    ACTIVITY MANAGER SERVICES (dumpsys activity services)
    ...
    ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
    ...
    ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
    ...
    
  3. 查看设备信息
    1. 查看手机型号
      adb shell getprop ro.product.model
    2. 查看电池状况
      adb shell dumpsys battery
    3. 查看屏幕分辨率
      adb shell wm size
    4. 查看屏幕密度
      adb shell wm density
    5. 查看显示屏参数
      adb shell dumpsys window displays
    6. 查看Android系统版本
      adb shell getprop ro.build.version.release
    7. 查看CPU信息
      adb shell cat /proc/cpuinfo
      查看手机CPU架构
      adb shell getprop ro.product.cpu.abi
    8. 查看内存信息
      adb shell cat /proc/meminfo
    9. 打开系统设置:
      adb shell am start -n com.android.settings/com.android.settings.Settings
    10. 打开开发者选项:
      adb shell am start -a com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS
    11. 进入WiFi设置
      adb shell am start -a android.settings.WIRELESS_SETTINGS
    12. 重启系统
      adb reboot
    13. 日志相关
      adb logcat > ~/logdebug.log
      adb logcat | grep logtag
      adb logcat | grep -i logtag #忽略大小写。

      adb logcat | grep --color=auto -i logtag #设置匹配字符串颜色。

ADB其他命令

  1. 清除应用数据与缓存

    adb shell pm clear <packagename>
    

    <packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

    adb shell pm clear com.xxx.xxx
    
  2. 与应用交互操作
    主要是使用 am <command> 命令,常用的 <command> 如下:

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

    <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 数组
    1. 调起Activity

      adb shell am start [options] <INTENT>
      

      例如:

      adb shell am start -n com.tencent.mm/.ui.LauncherUI
      

      表示调起微信主界面。

      adb shell am start -n com.cc.test/.MainActivity --es "params" "hello, world"
      

      表示调起 com.cc.test/.MainActivity 并传给它 string 数据键值对 params - hello, world。

    2. 调起Service

      adb shell am startservice [options] <INTENT>
      

      例如:

      adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
      
    3. 发送广播

      adb shell am broadcast [options] <INTENT>
      

      可以向所有组件广播,也可以只向指定组件广播。
      例如,向所有组件广播 BOOT_COMPLETED:

      adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
      

      又例如,只向 com.cc.test/.BootCompletedReceiver 广播 BOOT_COMPLETED:

      adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.cc.test/.BootCompletedReceiver
      
    4. 强制停止应用

      adb shell am force-stop <packagename>
      

      命令示例:

      adb shell am force-stop com.xxx.xxx
      
    5. 撤销应用程序的权限

      1. 向应用授予权限。只能授予应用程序声明的可选权限
      adb shell pm grant <packagename> <PACKAGE_PERMISSION>
      

      例如:adb -d shell pm grant packageName android.permission.BATTERY_STATS

      1. 取消应用授权
      adb shell pm revoke <packagename> <PACKAGE_PERMISSION>
      
  3. 模拟按键/输入

    Usage: input [<source>] <command> [<arg>...]
    
    The sources are:
          mouse
          keyboard
          joystick
          touchnavigation
          touchpad
          trackball
          stylus
          dpad
          gesture
          touchscreen
          gamepad
    
    The commands and default sources are:
          text <string> (Default: touchscreen)
          keyevent [--longpress] <key code number or name> ... (Default: keyboard)
          tap <x> <y> (Default: touchscreen)
          swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
          press (Default: trackball)
          roll <dx> <dy> (Default: trackball)
    

    比如模拟点击://在屏幕上点击坐标点x=50 y=250的位置。

    adb shell input tap 50 250

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容

  • ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是...
    网络安全自修室阅读 18,637评论 0 6
  • [ 二话不说,先附原文地址:https://github.com/mzlogin/awesome-adb[http...
    xiaodouyaer阅读 718评论 0 1
  • 查看设备屏幕分辨率、density 查看CPU 信息 查看栈顶的activity 查看所有在运行的任务栈 查看正在...
    一林花色阅读 1,987评论 0 0
  • adb shell 运行lua文件 1, android设备root权限2, 将liblasa.so push到/...
    artemi阅读 1,435评论 0 1
  • 参考链接 超详细的dubug教程 Android Studio 调试技巧 Android中开发需要的高效助推的命令...
    小人物灌篮阅读 6,431评论 1 4