聊一聊Android开发利器之adb
作者:互联网
学无止境,有一技旁身,至少不至于孤陋寡闻。
adb的全称为Android Debug Bridge,通过adb可以方便我们调试Android程序。作为移动端开发相关的同学,掌握所需要的adb操作命令是非常必须的,就把平时工作中用得相对比较多的adb命令做个梳理。
(日常中把adb操作命令搭配shell alias使用起来更方便)
ADB常用命令
1.启动/停止adb server命令
adb start-server //启动命令
adb kill-server //停止命令
2. 通过adb查看设备相关信息
- 查询已连接设备/模拟器
adb devices
- 查看手机型号
adb shell getprop ro.product.model
- 查看电池状况
adb shell dumpsys battery
- 查看屏幕分辨率
adb shell wm size
- 查看屏幕密度
adb shell wm density
- 查看显示屏参数
adb shell dumpsys window displays
- 查看Android系统版本
adb shell getprop ro.build.version.release
- 查看CPU信息
adb shell cat /proc/cpuinfo
- 查看手机CPU架构
adb shell getprop ro.product.cpu.abi
- 查看内存信息
adb shell cat /proc/meminfo
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. 通过adb在设备上操作应用相关
-
安装 APK
adb install [-rtsdg] <apk_path>
参数:
adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:参数 含义 -r 允许覆盖安装 -t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true"
的应用-s 将应用安装到 sdcard -d 允许降级覆盖安装 -g 授予所有运行时权限 -
卸载应用
adb uninstall [-k] <packagename>
<packagename>
表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。adb uninstall com.vic.dynamicview
-
强制停止应用
adb shell am force-stop <packagename>
命令示例:
adb shell am force-stop com.vic.dynamicview
-
调起对应的Activity
adb shell am start [options] <INTENT>
例如:
adb shell am start -n com.vic.dynamicview/.MainActivity --es "params" "hello, world"
表示调起 com.vic.dynamicview/.MainActivity 并传给它 string 数据键值对 params - hello, world。
-
查看前台 Activity
adb shell dumpsys activity activities | grep ResumedActivity
查看activity堆栈信息:
adb shell dumpsys activity
ACTIVITY MANAGER PENDING INTENTS (adb shell dumpsys activity intents) ... ACTIVITY MANAGER BROADCAST STATE (adb shell dumpsys activity broadcasts) ... ACTIVITY MANAGER CONTENT PROVIDERS (adb shell dumpsys activity providers) ... ACTIVITY MANAGER SERVICES (adb shell dumpsys activity services) ... ACTIVITY MANAGER ACTIVITIES (adb shell dumpsys activity activities) ... ACTIVITY MANAGER RUNNING PROCESSES (adb shell dumpsys activity processes) ...
-
打开系统设置:
adb shell am start -n com.android.settings/com.android.settings.Settings
-
打开开发者选项:
adb shell am start -a com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS
-
进入WiFi设置
adb shell am start -a android.settings.WIRELESS_SETTINGS
-
重启系统
adb reboot
5. 通过adb操作日志相关
-
logcat
help帮助信息adb logcat --help
可以查看logcat帮助信息
adb logcat 命令格式:adb logcat [选项] [过滤项]
, 其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的; -
输出日志信息到文件:
">"输出 :
">" 后面跟着要输出的日志文件, 可以将 logcat 日志输出到文件中, 使用adb logcat > log
命令, 使用more log
命令查看日志信息;
如:adb logcat > ~/logdebug.log
-
输出指定标签内容:
"-s"选项 : 设置默认的过滤器, 如 我们想要输出 "System.out" 标签的信息, 就可以使用adb logcat -s System.out
命令; -
清空日志缓存信息:
使用adb logcat -c
命令, 可以将之前的日志信息清空, 重新开始输出日志信息; -
输出缓存日志:
使用adb logcat -d
命令, 输出命令, 之后退出命令, 不会进行阻塞; -
输出最近的日志:
使用adb logcat -t 5
命令, 可以输出最近的5行日志, 并且不会阻塞; -
日志过滤:
注意:在windows上不能使用grep关键字,可以用findstr代替grep.-
过滤固定字符串:
adb logcat | grep logtag
adb logcat | grep -i logtag #忽略大小写。
adb logcat | grep logtag > ~/result.log #将过滤后的日志输出到文件
adb logcat | grep --color=auto -i logtag #设置匹配字符串颜色。 -
使用正则表达式匹配
adb logcat | grep "^..Activity"
-
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 数组 |
-
调起Activity
adb shell am start [options] <INTENT>
例如:
adb shell am start -n com.cc.test/.MainActivity --es "params" "hello, world"
表示调起 com.cc.test/.MainActivity 并传给它 string 数据键值对 params - hello, world。
-
调起Service
adb shell am startservice [options] <INTENT>
例如:
adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
-
发送广播
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
-
撤销应用程序的权限
- 向应用授予权限。只能授予应用程序声明的可选权限
adb shell pm grant <packagename> <PACKAGE_PERMISSION>
例如:
adb -d shell pm grant packageName android.permission.BATTERY_STATS
- 取消应用授权
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
结合shell alias使用adb
shell终端的别名只是命令的简写,有类似键盘快捷键的效果。如果你经常执行某个长长的命令,可以给它起一个简短的化名。使用alias命令列出所有定义的别名。
你可以在~/.bashrc(.zshrc)
文件中直接定义别名如alias logRunActivity="adb shell dumpsys activity activities | grep 'Run*'"
,也可以新创建一个文件如.byterc
, 然后在当前shell对应的文件中.bashrc
或者.zshrc
中增加source ~/.byterc
,重新source配置,使得配置生效,即可使别名全局生效。使用别名可以节省时间、提高工作效率。
如何添加别名alias
下面在MAC环境采用新建文件形式添加别名,步骤如下:
- 新建
.byterc
文件- 如果已经新建,直接打开
open ~/.byterc
- 没有新建,则新建后打开
新建:touch ~/.byterc
打开:open ~/.byterc
- 如果已经新建,直接打开
- 在.zshrc中添加
source ~/.byterc
- 在打开的
.byterc
文件中定义别名alias logRunActivity="adb shell dumpsys activity activities | grep 'Run*'"
Android同学应该知道作用就是查看当前设备运行的Activity信息 - 重新source配置,使得配置生效
$ source ~/.byterc
如果不是新建文件,直接使用.bashrc
或者.zshrc
,直接source对应的配置即可,如:$ source ~/.zshrc
. - 此时在命令行中直接执行
logRunActivity
即可查看当前设备运行的Activity信息。
注意: 可使用$ alias
查看当前有设置哪些别名操作。
标签:shell,logcat,--,am,命令,聊一聊,adb,Android 来源: https://blog.csdn.net/fengyeNom1/article/details/121770344