调试Android程序时,我们经常需要使用adb shell命令。adb是Android Debug Bridge的缩写,它充当调试桥梁的作用,就像一条连接开发机和设备之间的桥梁。
通过adb,我们可以在Eclipse中使用DDMS来调试Android程序,简单来说就是一种调试工具。它通过监听特定端口(如TCP 5554)来实现开发机和模拟器/设备之间的通讯。当我们运行Eclipse时,默认情况下会启动adb进程。
adb是一个C/S模式的程序,由三个部分组成:客户端、服务器和守护进程。其中客户端和服务器运行在开发机上,守护进程运行在模拟器或设备上。
通常,adb可执行文件位于/platform-tools/目录下,这是Android SDK的安装目录。为了方便使用,我们可以将adb路径添加到系统环境变量path中,例如:D:sdkplatform-tools; 这样每次打开命令行工具时都可以直接使用adb命令,而不必进入adb目录。
以下是一些常用的adb命令,可以帮助我们进行调试和测试:
adb devices
:查看当前连接的设备列表adb install [apk文件路径]
:安装一个应用程序adb uninstall [包名]
:卸载一个应用程序adb logcat
:查看设备的日志信息adb shell am start [包名/类名]
:启动一个应用程序adb shell input text [文本]
:模拟输入文本到设备adb shell screencap [文件路径]
:截屏并保存为图片文件adb pull [设备文件路径] [本地文件路径]
:从设备上复制文件到本地计算机adb push [本地文件路径] [设备文件路径]
:将本地文件复制到设备上
更详细的如下表~
命令 | 描述 |
---|---|
android list targets | 显示系统中全部Android平台 |
android list avd | 显示系统中全部AVD(模拟器) |
android create avd –name 名称 –target 平台编号 | 创建AVD(模拟器) |
emulator -avd 名称 -sdcard ~/名称.img (-skin 1280×800) | 启动模拟器 |
android delete avd –name 名称 | 删除AVD(模拟器) |
mksdcard 1024M ~/名称.img | 创建SDCard |
ddms | 启动DDMS |
adb devices | 显示当前运行的全部模拟器 |
adb -s 模拟器编号 命令 | 对某一模拟器执行命令 |
adb install -r 应用程序.apk | 安装应用程序 |
adb pull <remote> <local> | 获取模拟器中的文件 |
adb push <local> <remote> | 向模拟器中写文件 |
adb shell | 进入模拟器的shell模式 |
android | 启动SDK,文档,实例下载管理器 |
adb uninstall apk包的主包名 | 卸载apk包 |
adb help | 查看adb命令帮助信息 |
adb logcat -s 标签名 | 在命令行中查看LOG信息 |
adb remount | 删除系统应用 |
adb shellcd data/apprm apk包exit | 缷载apk包 |
adb remount | 删除系统应用,重新挂载系统分区,使系统分区重新可写 |
adb shellcd system/apprm *.apk | 删除系统应用 |
adb root | 获取管理员权限 |
adb shell am start -n 包名/包名 类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等) | 启动Activity |
adb forward tcp:5555 tcp:8000 | 发布端口 |
adb push <source> <destination> | 复制文件到设备或模拟器上 |
adb pull <source> <destination> | 从设备或模拟器上复制文件 |
adb devices | 搜索模拟器/设备的实例 |
adb bugreport | 查看bug报告 |
adb shell logcat -b radio | 记录无线通讯日志 |
adb get-product | 获取设备的ID |
adb get-serialno | 获取设备的序列号 |
adb shell sqlite3 | 访问数据库SQLite3 |
adb shellcd system/sd/datals | 进入系统内指定文件夹并列出内容 |
adb shellrm -r xxx | 删除名为xxx的文件夹及其内部所有文件 |
adb shellrm xxx | 删除文件xxx |
adb shellrmdir xxx | 删除文件夹xxx |
一、常用简单的adb命令:
命令 | 描述 |
---|---|
adb devices | 获取设备列表和设备的状态 |
adb get-state | 获取设备的状态(device,offline,unknown) |
adb kill-serveradb start-server | 结束,启动adb服务 |
adb install -r | 覆盖安装应用(apk) |
adb uninstall | 卸载应用(应用包名) |
adb pull | 将设备上的文件复制到电脑上 |
adb push | 将电脑上的文件复制到设备上 |
adb reboot | 重启设备 |
adb connect | 远程连接设备 |
adb disconnect | 断开设备连接 |
二、adb shell pm基本的命令:
命令 | 描述 |
---|---|
adb shell pm list package -s | 列出系统应用 |
adb shell pm list package -3 | 列出第三方的应用 |
adb shell pm list package -i | 列出来源 |
adb shell pm list package -f | 列出包名和路径 |
adb shell pm path packagename | 列出应用apk的位置 |
adb shell pm dump packagename | 列出应用相关的信息 |
adb shell pm clear packagename | 清除应用的缓存数据 |
adb shell pm install /data/local/tmp/test.apk | 安装应用 |
adb shell pm install -r /data/local/tmp/test.apk | 重新安装应用 |
adb shell pm uninstall -k packagename | 卸载应用(保留缓存数据) |
adb shell pm install -d apk | 允许降级安装 |
三、adb shell am基本的命令:
命令 | 描述 |
---|---|
adb shell am start -n activityname | 启动一个Activity |
adb shell am start -W activityname | 等待页面启动完成 |
adb shell am start -S activityname | 先停止应用再启动 |
am force-stop packagename | 结束应用 |
三、adb shell dumpsys基本的命令:
命令 | 描述 |
---|---|
adb shell dumpsys cpuinfo | 监控CPU信息 |
adb shell dumpsys meminfo | 监控内存信息 |
adb shell dumpsys power | 监控电源信息 |
adb shell dumpsys battery | 监控电池信息 |
adb shell dumpsys wifi | 监控WiFi信息 |
adb shell dumpsys notification | 监控通知信息 |
adb shell dumpsys activity | 获取页面信息 |
四、关闭某项进程,以monkey为例:
命令 | 描述 |
---|---|
ps | grep monkey | 查看monkey进程的pid |
kill pid | 杀死monkey进程 |
五、最近12小时的资源情况:
命令 | 描述 |
---|---|
adb shell dumpsys procstats --hours 12 | 查看最近12小时的资源情况 |
六、录制屏幕命令:
命令 | 描述 |
---|---|
adb shell screenrecord /sdcard/demo.mp4 | 录制屏幕视频 |
--time-limit | 限制录制时间 |
--size | 指定视频分辨率大小 |
--bit-rate | 指定视频的比特率 |
--verbose | 在命令行显示日志 |
七、截图命令:
命令 | 描述 |
---|---|
adb shell screencap -p /sdcard/screen.png | 截取屏幕截图并保存到指定位置 |
八、input命令:
adb shell input:
text
输入文本keyevent
输入事件tap
点击swipe
滑动
九、关于获取当前页面的信息:
命令 | 描述 |
---|---|
adb shell dumpsys activity top | findstr ACTIVITY | 获取当前界面的Activity |
adb shell dumpsys activity | findstr mFocusedActivity | 获取当前页面的activity |
十、生成当前页面的xml文本:
命令 | 描述 |
---|---|
adb shell uiautomator dump [file] | 获取当前页面的XML信息 |
示例XML信息中的属性说明:
text
:控件中显示的文本内容class
:控件的类型package
:包名content-desc
:说明checkable
:是否允许checkchecked
:check状态clickable
:是否允许clickenabled
:控件状态focusable
:是否允许获取焦点focused
:是否获取到焦点scrollable
:是否允许滚动long-clickable
:是否允许长按password
:是否是密码控件selected
:select状态bounds
:控件绘制的长宽及位置四个数据,分成两组,分别是左上坐标和右下坐标
十一、打印页面的log信息:
命令 | 描述 |
---|---|
logcat -s ActivityManager | 打印页面的log信息 |
十二、系统操作指令:
命令 | 描述 |
---|---|
adb shell getprop ro.product.model | 获取设备型号 |
adb shell getprop ro.build.version.release | 获取设备Android系统版本 |
adb get-serialno | 获取设备的序列号(设备号) |
adb shell wm size | 获取设备屏幕分辨率 |
adb shell dumpsys activity | find "mFocusedActivity" | 查看前台应用包名,适用于Android 7.0以下,必须先启动app |
adb shell dumpsys activity | find "mResumedActivity" | 查看前台应用包名,适用于Android 8.0以上,必须先启动app |
九、取日志:
命令 | 描述 |
---|---|
adb logcat -v time | 打印详细的日志信息 |
adb logcat -v time > D:log.txt | 把日志输出到电脑上的文本文件中 |
adb logcat -c | 清除之前的日志信息 |
十、日志过滤:
- 使用管道进程来查看日志:
adb logcat | grep MyApp
:过滤包含"MyApp"的日志adb logcat | grep -i myapp
:忽略大小写,过滤包含"myapp"的日志
- 只抓取某个应用的命令:
adb logcat | findstr app进程号
:只显示特定应用的日志(在Windows上使用findstr
)
- 日志级别过滤:
- 默认级别为V,输出所有日志最低级别。
- 日志级别包括:D(Debug)、I(Info)、W(Warning)、E(Error)、F(Fatal)和S(Silent,最高级别,不输出任何日志)。
示例:如果想要查看手机上级别为错误的日志,可以使用以下命令:
adb logcat *:E
(不区分大小写)