irpas技术客

ADB常用命令_小胖熏鱼_adb常用命令

大大的周 8266

一、 adb安装及配置 1 下载安装

创建目录,点击安装exe文件或将免安装版放到创建目录下 下载及简介地址: Android 调试桥 (ADB) ?|? Android 开源项目 ?|? Android Open Source Project (google.cn)

2 配置环境

在系统环境配置中新建android_adb_server_port 5037默认端口(有些调试需要默认端口才能使用,如chrome调试手机) ??添加adb目录到环境目录path中,并保存

3 常见问题 3.1当都口号被占或查询端口号

查看端口是否被占用:运行:netstat -ano | findstr “5037” 或者(查看多有端口netstat -ano) ??C:\Users\chen>netstat -aon|findstr 5037 ??TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3676

通过PID查看所有进程 ??C:\Users\chen>tasklist /fi “PID eq 3676” ??映像名称 PID 会话名 会话# 内存使用 ??svchost.exe 3676 Services 0 13,800 K

杀死占用端口的进程 ??C:\Users\chen>taskkill /pid 3676 /f ??成功: 已终止 PID 为 3676 的进程。

3.2 chrome无法调试

输入chrome://inspect/#devices无法显示 ??升级谷歌浏览器(方法1) ??手机的开发者模式关掉再打开(方法2)

3.3 adb输出日志报错 read: unexpected EOF!

原因:logcat 进程异常退出,是因为 log buffer size 设置过小导致的,默认size 是 256KB,如果长时间运行,并产生大量log 日志,肯定超过 默认256KB。解决方法: 1).在手机的系统设置中,将日志记录器缓冲区大小调整到更大一些即可。执行:adb logcat -G 2m设置缓冲区大小后,再执行adb logcat 2).设置路径:系统设置 > 开发者选项 > 调试 > 日志记录器缓冲区大小

二、adb常用命令

adb [-d|-e|-s ] 连接指定设备 参数: -d 指定当前唯一通过USB 连接的Android 设备为命令目标 -e 指定当前唯一运行的模拟器为命令目标 -s 指定相应serialNumber 号的设备/模拟器为命令目标 command 为所需对设备执行的命令

1 连接设备

adb devices #查看连接设备 adb -s cf27456f shell # 指定连接设备使用命令 adb get-serialno #获取序列号 adb connect ip # 连接设备 adb disconnect # 断开连接

adb version 查看adb 版本信息 adb devices 查看adb 连接设备 示例: $adb devices List of devices attached 1226959f device 3426422f offline 注意:offline 表示设备未连接成功或无响应,device 设备已连接 adb get-serialno 获取设备序列号

2 adb shell unix常用命令

cat 显示文件内容 cd 切换目录 chmod 改变文件的存取模式/访问权限 cf 查看磁盘空间使用情况 grep 过滤输出 kill 杀死指定PID的进程 ls 列举目录内容 mount 挂载目录的查看和管理 mv 移动或重命名文件 ps 查看正在运行的进程 rm 删除文件 top 查看进程的资源占用情况

3 安装和卸载

adb install test.apk # 安装应用 adb install -r demo.apk #安装apk 到sd 卡: adb uninstall cn.com.test.mobile #卸载应用,需要指定包 adb uninstall -k cn.com.test.mobile #卸载app 但保留数据和缓存文件

4 启动停止服务

adb start-server 启动adb 服务,基本不会用到,因为只要设备连接正确,会自动启动adb server adb kill-server 停止adb server adb -P start-server 指定adb server 的网络端口port (默认为5037)启动服务

5应用交互 5.1 am (activity manager)

这个命令可以启动Activity、打开或关闭进程、发送广播等操作。 adb shell am command 命令详解 start [options] 启动 指定的 Activity startservice [options] 启动 指定的 Service broadcast [options] 发送 指定的广播 force-stop 停止 相关的进程

参数很灵活,和写 Android 程序时代码里的 Intent 相对应,用于决定 intent 对象的选项[options]如下: -a 指定 action,如android.intent.action.VIEW -c 指定 category,如android.intent.category.APP_CONTACTS -n 指定完整 component 名,用于明确指定启动哪个 Activity,如com.example.app/.ExampleActivity

5.1.1启动 Activity

adb shell am start [options] 示例: #指定完整 component 名,用于明确指定启动哪个Activity $adb shell am start -n 如: #表示调起微信主界面 $adb shell am start -n com.tencent.mm/.ui.LauncherUI

5.1.2启动 Service

adb shell am startservice [options] 示例: 表示调起微信的某 Service。 $adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService

5.1.3 发送广播

adb shell am broadcast [options] 可以向所有组件广播,也可以只向指定组件广播。 示例: #向所有组件广播 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.CCNNECTVITY_CHANGE 网络连接发生变化 android.intent.actian.SCREEN_ON 屏幕点亮 android.intent.actian.SCREEN_CFF 屏幕熄灭 android.intent.actian.BATTERY_Low 电量低,会弹出电量低提示框 android.int ent.actian.BATTERY_OKAY 电量恢复了 android.intent.actian.BOOT_COMIPLETED 设备启动完毕 android. intent.actian.DEVCE_STORAGE_LOw 存储空间过低 android. intent.actian.DEMCE_STORAGE_OK 存储空间恢复 android. intent.actian.PACKAGE_ADDED 安装了新的应用 android.net.wifi.STATE_CHANGE WFi状态变为启用关闭正在启动 android.net.wifi.WIH_STATE_CHANGED WFi连接状态发生变化正在关i闭/未知 android.intent.action.BATTERY_CHANGED 电池电量发生变化 android.int ent.actian.INPUT_METHOD_CHANGED 系统输入法发生变化 android.intent.actian.ACTON_POWER_CONNECTED 外部电源连接 android. int ent.action.ACTON_POWER_DISCONNE CTED 外部电源断开连接 android.intent.actian.DREAMING_STARTED 系统开始休眠 android. intent.actian.DREAMING_STOPPED 系统停止休眠 android. intent.actian.WALLPAPER_CHANGED 壁纸发生变化 android.intent.actian.HEADSET_PLUG 插入耳机 android.intent.actian.MEDIA_UNMOUNTED 卸载外部介质 android.intent.actian.MEDIA_MOUNTED 挂载外部介质 android.os.action.POWER_SAVE_MODE_CHANGED 省电模式开启

5.1.4停止

adb shell am force-stop 强制停止应用

5.2 pm (package manager)

adb shell pm 包管理

adb shell pm clear cn.com.test.mobile #清除应用数据与缓存adb shell pm clear < packagename>

5.2.1 list packages [options]

打印所有软件包,可选择只打印软件包名称中包含的软件包。 不使用参数:adb shell pm list packages, 打印设备/模拟器上的所有软件包 adb shell pm list packages -f, 输出包和包相关联的文件 adb shell pm list packages -d, 只输出禁用的包。由于本机禁用没有,输出为空。 adb shell pm list packages -e, 只输出启用的包。 adb shell pm list packages -s, 只输出系统的包。 adb shell pm list packages -3, 只输出第三方的包。 adb shell pm list packages -i, 只输出包和安装信息(安装来源)。 adb shell pm list packages -u, 只输出包和未安装包信息(安装来源)。 adb shell pm list packages --user <USER_ID>, 根据用户id查询用户的空间的所有包,USER_ID代表当前连接设备的顺序,从零开始: adb shell pm list packages -e “ximalaya”, 只输出启用的包。

5.2.2 pm安装/卸载/路径

adb shell pm set-install-location 0 1 2 设置应用安装的默认目录—— 0 auto ——1 手机内存 ——2 sdcard adb shell pm get-install-location 获取应用安装方式,返回当前的安装位置。返回结果同上参数选项。 adb shell pm path :查询package的安装位置。

adb shell pm install -r -f -s apppath 安装apk,r 强制安装,f 安装手机内存 s 安装sdcard adb shell pm pm uninstall -k packname 卸载应用 -k 保留应用数据 /data/data/packname下的数据 或者 /sdcard/Android/data/packnmae

5.2.3 应用enable/disable

adb shell pm enable <PACKAGE_OR_COMPONENT> 设置应用为可用,或者组件不可用 组件跟类的完整路径(如:pm enable “package/class”) adb shell pm disable <PACKAGE_OR_COMPONENT> 设置应用为不可用,在手机上就隐藏了(如:pm disable “package/class”) 1).冻结应用 找到应用的 MainActivity(即MAIN,LAUNCHER):# pm disable com.example.test/com.test.MainActivity (完整路径:包名/类名) 2). 禁止开机启动 找到对就的receiver(即action与MainActivity的action相同的):# pm disable com.example.test/com.test.BootBroadReceiver (完整路径:包名/类名)

5.2.4 清除数据与缓存

adb shell pm clear :对指定的package删除所有数据。

5.2.4 用户与权限

grant <PACKAGE_PERMISSION> :授权给应用。 revoke <PACKAGE_PERMISSION> :撤销权限。 set-permission-enforced [true|false] :使指定权限生效或者失效。 disable-user [options] <PACKAGE_OR_COMPONENT> :参数选项:–user <USER_ID> :禁用用户 The user to disable. create-user <USER_NAME> :增加一个新的USER。 remove-user <USER_ID> :删除一个USER。 get-max-users :该设备所支持的最大USER数。(某些设备不支持该命令)

adb shell dumpsys package #包信息Package Information adb shell dumpsys meminfo #内存使用情况Memory Usage adb logcat #查看日志 adb logcat -c #清除log 缓存 adb reboot #重启 adb shell getprop ro.build.version.release #查看Android 系统版本 adb shell top -s 10 #查看占用内存前10 的app adb push #从本地复制文件到设备 adb pull #从设备复制文件到本地 adb bugreport #查看bug 报告 adb help #查看ADB 帮助

6 文件管理 6.1 复制设备里的文件到电脑

adb pull <设备里的文件路径> [电脑上的目录] 示例: $adb pull /sdcard/abc.mp4 ~/tmp/ 小技巧: 设备上的文件路径可能需要root 权限才能访问,如果你的设备已经 root 过, 可以先使用 adb shell 和 su 命令在adb shell里获取 root 权限后, 先 cp /path/on/device /sdcard/filename 将文件复制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc。

6.2 复制电脑里的文件到设备

adb push <电脑上的文件路径> <设备里的目录> 示例: $adb push e:/ss.au3 /data/local/tmp/ 小技巧: 设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过, 可以先 adb push /path/on/pc /sdcard/filename, 然后 adb shell 和 su 在 adb shell 里获取 root 权限后,cp /sdcard/filename /path/on/device

7 使用ADB命令模拟按键/输入 7.1 keyevent:模拟按键

adb shell input keyevent keycode位操作参数,不同的 keycode 能实现不同的功能 $adb shell input keyevent 223 #熄灭屏幕 adb shell input keyevent 3 # 模拟手机按键home KEYCODE列表

7.1.1电话键 键名 描述 键值 KEYCODE_CALL 拨号键5 KEYCODE_ENDCALL 挂机键6 KEYCODE_HOME 按键Home3 KEYCODE_MENU 菜单键82 KEYCODE_BACK 返回键4 KEYCODE_SEARCH 搜索键84 KEYCODE_CAMERA 拍照键27 KEYCODE_FOCUS 拍照对焦键80 KEYCODE_POWER 电源键26 KEYCODE_NOTIFICATION 通知键83 KEYCODE_MUTE 话筒静音键91 KEYCODE_VOLUME_MUTE 扬声器静音键164 KEYCODE_VOLUME_UP 音量增加键24 KEYCODE_VOLUME_DOWN 音量减小键25 7.1.2控制键 键名 描述 键值 KEYCODE_ENTER 回车键66 KEYCODE_ESCAPE ESC键111 KEYCODE_DPAD_CENTER 导航键 确定键23 KEYCODE_DPAD_UP 导航键 向上19 KEYCODE_DPAD_DOWN 导航键 向下20 KEYCODE_DPAD_LEFT 导航键 向左21 KEYCODE_DPAD_RIGHT 导航键 向右22 KEYCODE_MOVE_HOME 光标移动到开始键122 KEYCODE_MOVE_END 光标移动到末尾键123 KEYCODE_PAGE_UP 向上翻页键92 KEYCODE_PAGE_DOWN 向下翻页键93 KEYCODE_DEL 退格键67 KEYCODE_FORWARD_DEL 删除键112 KEYCODE_INSERT 插入键124 KEYCODE_TAB Tab键61 KEYCODE_NUM_LOCK 小键盘锁143 KEYCODE_CAPS_LOCK 大写锁定键115 KEYCODE_BREAK Break/Pause键121 KEYCODE_SCROLL_LOCK 滚动锁定键116 KEYCODE_ZOOM_IN 放大键168 KEYCODE_ZOOM_OUT 缩小键169 7.1.3组合键 键名 描述 KEYCODE_ALT_LEFT Alt+Left KEYCODE_ALT_RIGHT Alt+Right KEYCODE_CTRL_LEFT Control+Left KEYCODE_CTRL_RIGHT Control+Right KEYCODE_SHIFT_LEFT Shift+Left KEYCODE_SHIFT_RIGHT Shift+Right 7.1.4基本 键名 描述 键值 KEYCODE_0 按键'0'7 KEYCODE_1 按键'1'8 KEYCODE_2 按键'2'9 KEYCODE_3 按键'3'10 KEYCODE_4 按键'4'11 KEYCODE_5 按键'5'12 KEYCODE_6 按键'6'13 KEYCODE_7 按键'7'14 KEYCODE_8 按键'8'15 KEYCODE_9 按键'9'16 KEYCODE_A 按键'A'29 KEYCODE_B 按键'B'30 KEYCODE_C 按键'C'31 KEYCODE_D 按键'D'32 KEYCODE_E 按键'E'33 KEYCODE_F 按键'F'34 KEYCODE_G 按键'G'35 KEYCODE_H 按键'H'36 KEYCODE_I 按键'I'37 KEYCODE_J 按键'J'38 KEYCODE_K 按键'K'39 KEYCODE_L 按键'L'40 KEYCODE_M 按键'M'41 KEYCODE_N 按键'N'42 KEYCODE_O 按键'O'43 KEYCODE_P 按键'P'44 KEYCODE_Q 按键'Q'45 KEYCODE_R 按键'R'46 KEYCODE_S 按键'S'47 KEYCODE_T 按键'T'48 KEYCODE_U 按键'U'49 KEYCODE_V 按键'V'50 KEYCODE_W 按键'W'51 KEYCODE_X 按键'X'52 KEYCODE_Y 按键'Y'53 KEYCODE_Z 按键'Z'54 7.1.5符号 键名 描述 KEYCODE_PLUS 按键'+' KEYCODE_MINUS 按键'-' KEYCODE_STAR 按键'*' KEYCODE_SLASH 按键'/' KEYCODE_EQUALS 按键'=' KEYCODE_AT 按键'@' KEYCODE_POUND 按键'#' KEYCODE_APOSTROPHE 按键''' (单引号) KEYCODE_BACKSLASH 按键'\' KEYCODE_COMMA 按键',' KEYCODE_PERIOD 按键'.' KEYCODE_LEFT_BRACKET 按键'[' KEYCODE_RIGHT_BRACKET 按键']' KEYCODE_SEMICOLON 按键';' KEYCODE_GRAVE 按键'`' KEYCODE_SPACE 空格键 7.1.6小键盘 键名 描述 KEYCODE_NUMPAD_0 小键盘按键'0' KEYCODE_NUMPAD_1 小键盘按键'1' KEYCODE_NUMPAD_2 小键盘按键'2' KEYCODE_NUMPAD_3 小键盘按键'3' KEYCODE_NUMPAD_4 小键盘按键'4' KEYCODE_NUMPAD_5 小键盘按键'5' KEYCODE_NUMPAD_6 小键盘按键'6' KEYCODE_NUMPAD_7 小键盘按键'7' KEYCODE_NUMPAD_8 小键盘按键'8' KEYCODE_NUMPAD_9 小键盘按键'9' KEYCODE_NUMPAD_ADD 小键盘按键'+' KEYCODE_NUMPAD_SUBTRACT 小键盘按键'-' KEYCODE_NUMPAD_MULTIPLY 小键盘按键'*' KEYCODE_NUMPAD_DIVIDE 小键盘按键'/' KEYCODE_NUMPAD_EQUALS 小键盘按键'=' KEYCODE_NUMPAD_COMMA 小键盘按键',' KEYCODE_NUMPAD_DOT 小键盘按键'.' KEYCODE_NUMPAD_LEFT_PAREN 小键盘按键'(' KEYCODE_NUMPAD_RIGHT_PAREN 小键盘按键')' KEYCODE_NUMPAD_ENTER 小键盘按键回车 7.1.7功能键 键名 描述 KEYCODE_F1 按键F1 KEYCODE_F2 按键F2 KEYCODE_F3 按键F3 KEYCODE_F4 按键F4 KEYCODE_F5 按键F5 KEYCODE_F6 按键F6 KEYCODE_F7 按键F7 KEYCODE_F8 按键F8 KEYCODE_F9 按键F9 KEYCODE_F10 按键F10 KEYCODE_F11 按键F11 KEYCODE_F12 按键F12 7.1.8多媒体键 键名 描述 KEYCODE_MEDIA_PLAY 多媒体键 播放 KEYCODE_MEDIA_STOP 多媒体键 停止 KEYCODE_MEDIA_PAUSE 多媒体键 暂停 KEYCODE_MEDIA_PLAY_PAUSE 多媒体键 播放/暂停 KEYCODE_MEDIA_FAST_FORWARD 多媒体键 快进 KEYCODE_MEDIA_REWIND 多媒体键 快退 KEYCODE_MEDIA_NEXT 多媒体键 下一首 KEYCODE_MEDIA_PREVIOUS 多媒体键 上一首 KEYCODE_MEDIA_CLOSE 多媒体键 关闭 KEYCODE_MEDIA_EJECT 多媒体键 弹出 KEYCODE_MEDIA_RECORD 多媒体键 录音 7.1.9手柄按键 键名 描述 KEYCODE_BUTTON_1 通用游戏手柄按钮 #1 KEYCODE_BUTTON_2 通用游戏手柄按钮 #2 KEYCODE_BUTTON_3 通用游戏手柄按钮 #3 KEYCODE_BUTTON_4 通用游戏手柄按钮 #4 KEYCODE_BUTTON_5 通用游戏手柄按钮 #5 KEYCODE_BUTTON_6 通用游戏手柄按钮 #6 KEYCODE_BUTTON_7 通用游戏手柄按钮 #7 KEYCODE_BUTTON_8 通用游戏手柄按钮 #8 KEYCODE_BUTTON_9 通用游戏手柄按钮 #9 KEYCODE_BUTTON_10 通用游戏手柄按钮 #10 KEYCODE_BUTTON_11 通用游戏手柄按钮 #11 KEYCODE_BUTTON_12 通用游戏手柄按钮 #12 KEYCODE_BUTTON_13 通用游戏手柄按钮 #13 KEYCODE_BUTTON_14 通用游戏手柄按钮 #14 KEYCODE_BUTTON_15 通用游戏手柄按钮 #15 KEYCODE_BUTTON_16 通用游戏手柄按钮 #16 KEYCODE_BUTTON_A 游戏手柄按钮 A KEYCODE_BUTTON_B 游戏手柄按钮 B KEYCODE_BUTTON_C 游戏手柄按钮 C KEYCODE_BUTTON_X 游戏手柄按钮 X KEYCODE_BUTTON_Y 游戏手柄按钮 Y KEYCODE_BUTTON_Z 游戏手柄按钮 Z KEYCODE_BUTTON_L1 游戏手柄按钮 L1 KEYCODE_BUTTON_L2 游戏手柄按钮 L2 KEYCODE_BUTTON_R1 游戏手柄按钮 R1 KEYCODE_BUTTON_R2 游戏手柄按钮 R2 KEYCODE_BUTTON_MODE 游戏手柄按钮 Mode KEYCODE_BUTTON_SELECT 游戏手柄按钮 Select KEYCODE_BUTTON_START 游戏手柄按钮 Start KEYCODE_BUTTON_THUMBL Left Thumb Button KEYCODE_BUTTON_THUMBR Right Thumb Button 7.1.10待查 键名 描述 KEYCODE_NUM 按键Number modifier KEYCODE_INFO 按键Info KEYCODE_APP_SWITCH 按键App switch KEYCODE_BOOKMARK 按键Bookmark KEYCODE_AVR_INPUT 按键A/V Receiver input KEYCODE_AVR_POWER 按键A/V Receiver power KEYCODE_CAPTIONS 按键Toggle captions KEYCODE_CHANNEL_DOWN 按键Channel down KEYCODE_CHANNEL_UP 按键Channel up KEYCODE_CLEAR 按键Clear KEYCODE_DVR 按键DVR KEYCODE_ENVELOPE 按键Envelope special function KEYCODE_EXPLORER 按键Explorer special function KEYCODE_FORWARD 按键Forward KEYCODE_FORWARD_DEL 按键Forward Delete KEYCODE_FUNCTION 按键Function modifier KEYCODE_GUIDE 按键Guide KEYCODE_HEADSETHOOK 按键Headset Hook KEYCODE_META_LEFT 按键Left Meta modifier KEYCODE_META_RIGHT 按键Right Meta modifier KEYCODE_PICTSYMBOLS 按键Picture Symbols modifier KEYCODE_PROG_BLUE 按键Blue “programmable” KEYCODE_PROG_GREEN 按键Green “programmable” KEYCODE_PROG_RED 按键Red “programmable” KEYCODE_PROG_YELLOW 按键Yellow “programmable” KEYCODE_SETTINGS 按键Settings KEYCODE_SOFT_LEFT 按键Soft Left KEYCODE_SOFT_RIGHT 按键Soft Right KEYCODE_STB_INPUT 按键Set-top-box input KEYCODE_STB_POWER 按键Set-top-box power KEYCODE_SWITCH_CHARSET 按键Switch Charset modifier KEYCODE_SYM 按键Symbol modifier KEYCODE_SYSRQ 按键System Request / Print Screen KEYCODE_TV 按键TV KEYCODE_TV_INPUT 按键TV input KEYCODE_TV_POWER 按键TV power KEYCODE_WINDOW 按键Window KEYCODE_UNKNOWN 未知按键 7.2 tap:点击

adb shell input tap 454 204 坐标怎么来的:通过uiautomatorviewer.bat定位工具查看坐标[393,140] [516,268],然后求出中间值[454 204]

7.3 swipe:滑动

$adb shell input swipe 300 1000 300 500 #滑动解锁,向上滑动手势解锁 #参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标

长按的技巧 最后加一个参数,表示操作的时间ms,如 adb shell input swipe 100 200 500 600 900 从(100,200)滑动到(500,600)总花费900ms adb shell input swipe 1400 400 1400 400 900 长按(1400,400) 900ms

7.4 text:文本(暂不支持中文及“&”)

$adb shell input text hello #焦点处于某文本框时输入文本

7.5其他

press:轨迹球按下、roll:轨迹球滚动 是轨迹球操作,在手机上没啥用。

8 查看日志 8.1 Android 日志

[adb] logcat [] … [] …

8.1.1日志过滤 8.1.1.1按级别过滤日志

优先级 V —— Verbose(最低,输出得最多) D —— Debug I —— Info W —— Warning E —— Error F —— Fatal S —— Silent(最高,啥也不输出) 示例:输出W之上的日志,W,E,F,S $adb logcat *:W

8.1.1.2按 tag 和级别过滤日志

可以由多个 [:priority] 组成 示例:输出 tag ActivityManager 的 I 以上级别日志,输出tag MyApp的D 以上级别日志,及其它 tag 的 S 级别日志(即屏蔽其它 tag 日志)。 $adb logcat ActivityManager:I MyApp:D *:S

8.1.2日志格式

adb logcat -v 指定日志输出格式 指定日志输出格式 示例: $adb logcat -v brief #默认格式,/(): $adb logcat -v process #() $adb logcat -v tag # /: $adb logcat -v raw # $adb logcat -v time # /(): $adb logcat -v threadtime # : $adb logcat -v long #[ : /:] $adb logcat -v long ActivityManager:I *:S #指定格式可与上面的过滤同时使用

8.1.3日志清空

$adb logcat -c 清空日志

8.1.4获取全量日志

adb pull data/log/android_logs ?adb pull data/log/jank/logCached ?adb pull data/log/dubai/systrace

8.2 内核日志

$adb shell dmesg 查看内核日志

9 查看设备信息 9.1 CPU信息 9.1.1 adb shell cat /proc/cpuinfo

#总核数 = 物理CPU个数 X 每颗物理CPU的核数 #总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 常用命令 #查看物理CPU个数 cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l #查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep “cpu cores”| uniq #查看逻辑CPU的个数 cat /proc/cpuinfo| grep “processor”| wc -l 参数解释 processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核 vendor_id :CPU制造商 cpu family :CPU产品系列代号 model   :CPU属于其系列中的哪一代的代号 model name:CPU属于的名字及其编号、标称主频 stepping  :CPU属于制作更新版本 cpu MHz  :CPU的实际使用主频 cache size :CPU二级缓存大小 physical id :单个CPU的标号 siblings :单个CPU逻辑物理核数 core id :当前物理核在其所处CPU中的编号,这个编号不一定连续 cpu cores :该逻辑核所处CPU的物理核数 apicid :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续 fpu :是否具有浮点运算单元(Floating Point Unit) fpu_exception :是否支持浮点计算异常 cpuid level :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容 wp :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection) flags :当前CPU支持的功能 bogomips :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second) clflush size :每次刷新缓存的大小单位 cache_alignment :缓存地址对齐单位 address sizes :可访问地址空间位数 备注:processor : 0 ~ processor : 3 表示 4 核 CPU

9.1.2 adb shell dumpsys cpuinfo 9.2 内存

内存信息 $adb shell cat /proc/meminfo adb shell cat /proc/meminfo |findstr MemTotal 获取总内存 内存 adb shell dumpsys meminfo adb shell dumpsys meminfo 包名或者adb shell dumpsys meminfo pid

9.3屏幕及显示

屏幕分辨率 $adb shell wm size 屏幕密度 $adb shell wm density 显示屏参数 $adb shell dumpsys window displays 帧率 adb shell dumpsys gfxinfo 显示 adb shell dumpsys display

9.4 android信息

android_id $adb shell settings get secure android_id Android 系统版本 $adb shell getprop ro.build.version.release

9.5手机设备

IMEI KaTeX parse error: Expected 'EOF', got '#' at position 33: … iphonesubinfo #?而在 Android 5.0 …service call iphonesubinfo 1

Serialno adb get-serialno #获取序列号

型号 $adb shell getprop ro.product.model

9.6电池电源

电源 adb shell dumpsys power 电池状态 adb shell dumpsys batterystats 电池 adb shell dumpsys battery

9.7 闹钟

闹钟 adb shell dumpsys alarm

9.8 位置

位置 adb shell dumpsys location

9.9 IP&MAC地址

IP 地址 $adb shell ifconfig | find “Mask” $adb shell ifconfig wlan0 #设备连着 WiFi,可以使用如下命令来查看局域网 IP $adb shell netcfg # 上面两个无结果可以用这个,查看网络连接状态

Mac 地址 $adb shell cat /sys/class/net/wlan0/address # 设备不同可能地址不同

9.10更多硬件与系统属性

$adb shell cat /system/build.prop adb shell getprop <属性名>

也可以 $adb shell cat /system/build.prop | grep ro.product.cpu.abi $adb shell cat /system/build.prop | find “ro.product.cpu.abi”

ro.build. version.sdk SDK版本 ro. build.version.release Android 系统版本 ro.build.version.security_patch Android 安全补丁程序级别 ro.product.model 型号 ro. product.brand 品牌 ro. product.name 设备名 ro.product.board 处理器型号 ro. product.cpu.abilist CPU支持的abi 列表 persist.sys.isusbOtgEnabled是否支持OTG dalvik.vm.heapsize 每个应用程序的内存上限 ro.sf.lcd_density 屏幕密度

10 修改设置

修改设置之后,运行恢复命令仍然不太正常,可以运行 adb reboot 重启设备或手动重启。 修改设置的原理主要是通过 settings 命令修改 /data/data/com.android.providers.settings/databases/settings.db 里存放的设置值。

10.1分辨率

adb shell wm size 480x1024 #将分辨率修改为 480px * 1024px adb shell wm size reset #恢复原分辨率

10.2屏幕密度

adb shell wm density 160 #屏幕密度修改为 160dpi adb shell wm density reset #恢复原屏幕密度

10.3显示区域

adb shell wm overscan 0,0,0,100 #四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 100px留白 adb shell wm overscan reset #恢复显示区域

10.4 关闭 USB 调试模式

adb shell settings put global adb_enabled 0 使用命令无法恢复调试模式,只能通过手动

10.5 状态栏和导航栏的显示隐藏

adb shell settings put global policy_control < key-values> < key-values> 可由如下几种键及其对应的值组成,格式为 < key1>=< value1>:< key2>=< value2> key 键对应的值 key 含义 immersive.full 同时隐藏 immersive.status 隐藏状态栏 immersive.navigation 隐藏导航栏 immersive. preconfirms ? 这些键对应的值可则如下值用逗号组合

示例: #设置在所有界面下都同时隐藏状态栏和导航栏 $adb shell settings put global policy_control immersive.full=* value 含义 apps 所有应用 t 所有界面 packagename 指定应用 -packagename 排除指定应用

#设置在包名为 com.package1 和 com.package2 的应用里隐藏状态栏,在除了包名为 com.package3 的所有应用里隐藏导航栏。 $adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3

11 常用实用功能 11.1屏幕截图

adb exec-out screencap -p > img.png # 老版本无exec-out命令,只适合于新版的截图 adb shell screencap -p /sdcard/img.png # 老版本截图先保存在设备端 adb pull /sdcard/img.png # 通过pull拷贝到本地 screencap 参数: -p 指定保存文件为 png 格式 -d display-id 指定截图的显示屏编号(有多显示屏的情况下)

11.2录制屏幕

默认录制时间和最长录制时间都是180s adb shell screenrecord /sdcard/filename.mp4 screenrecord 参数: –size WIDTHxHEIGHT 视频的尺寸,比如 1280x720,默认是屏幕分辨率。 –bit-rate RATE 视频的比特率,默认是 4Mbps。 –time-limit TIME 录制时长,单位秒。 –verbose 输出更多信息。

11.3 重新挂载system分区为可写

注:需要 root 权限 /system 分区默认挂载为只读,但有些操作比如给 Android 系统添加命令、删除自带应用等需要对 /system 进行写操作,所以需要重新挂载它为可读写。 步骤: 1.进入 shell 并切换到 root 用户权限。 $adb shell $su 2.查看当前分区挂载情况。 $mount 输出如下 … debugfs /sys/kernel/debug debugfs rw,relatime 0 0 none /acct cgroup rw,relatime,cpuacct 0 0 none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0 tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0 none /dev/cpuctl cgroup rw,relatime,cpu 0 0 /dev/block/mtdblock0 /system ext4 ro,seclabel,relatime,data=ordered 0 0 … 找到其中我们关注的带 /system 的那一行:

3.重新挂载。 $mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system

11.4 查看连接过的 WiFi 密码

$adb shell $su $cat /data/misc/wifi/*.conf 注:需要 root 权限

11.5设置系统日期和时间

$adb shell $su $date -s 20190531.131600 #将系统日期和时间更改为 2019 年 05 月 31 日 13 点 16 分 00 秒。 注:需要 root 权限

11.6 重启手机 $adb reboot

11.7 检测设备是否已 root

$adb shell $su 此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。

11.8 使用 Monkey 进行压力测试

Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。

#向 指定的应用程序发送 500 个伪随机事件 $adb shell monkey -p -v 500 monkey 官方文档 https://developer.android.com/studio/test/monkey.html

11.9 开启/关闭 WiFi

$adb shell svc wifi enable 开启 WiFi: $adb shell svc wifi disable 关闭 WiFi: 注:需要 root 权限

11.10 切换横竖屏

首先禁用自动旋转 $adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0 然后切换横竖屏 value值:0竖屏 1横屏 2 3 (0,1,2,3代表旋转的方向) $adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:0 1 2 3

12刷机相关命令

注:不要随便操作,没实验过无法保证成功

12.1重启到 Recovery 模式

$adb reboot recovery

12.2从 Recovery 重启到 Android

$adb reboot

12.3重启到 Fastboot 模式

$adb reboot bootloader

12.4通过 sideload 更新系统

如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。 以 Recovery 模式下更新为例: 1.重启到 Recovery 模式。 $adb reboot recovery 2.在设备的 Recovery 界面上操作进入 Apply update-Apply from ADB。 注:不同的 Recovery 菜单可能与此有差异,有的是一级菜单就有 Apply update from ADB。 3.通过 adb 上传和更新系统。 $adb sideload <path-to-update.zip>

13进程管理 13.1查看应用进程

adb shell ps|findstr com.app.test查询不到,则该进程没有启动

13.2 杀掉进程或应用

第一种:kill -9 进程号 adb shell kill -9 1137

第二种:adb shell am force-stop 包名全称 该方法不支持部分匹配,所以一定要是包名的全称。

14 查看实时资源占用情况

adb shell top top命令参数如下: 使用方法: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ] -m num 最多显示多少个进程 -n num 刷新多少次后退出 -d num 刷新时间间隔(单位秒,默认值 5) -s col 按某列排序(可用 col 值(第三行):cpu, vss, rss, thr) -t 显示线程信息 -i: 只显示活跃进程 -h 显示帮助文档

$adb shell top User 13%, System 5%, IOW 0%, IRQ 0% User 85 + Nice 0 + Sys 37 + Idle 509 + IOW 0 + IRQ 0 + SIRQ 0 = 631 PID PR CPU% S #THR VSS RSS PCY UID Name 22205 0 13% S 56 423416K 88160K fg u0_a92 com.tmall.wireless 24310 1 2% R 1 1232K 536K root top 22600 0 1% S 46 341712K 40872K fg u0_a90 com.wandoujia.phoenix2.usbproxy 31125 1 1% S 31 319976K 33284K fg u0_a74 com.android.Chinpower 1533 0 1% S 32 67320K 20552K fg system /system/bin/surfaceflinger 1852 0 1% S 112 445876K 80304K fg system system_server … 10 0 0% S 1 0K 0K root watchdog/0 16 1 0% S 1 0K 0K root khelper 22 1 0% S 1 0K 0K root suspend_sys_syn 第一组数据的含义(第一行和第二行): User 处于用户态的运行时间,不包含优先值为负进程 Nice 优先值为负的进程所占用的CPU时间 Sys 处于核心态的运行时间 Idle 除IO等待时间以外的其它等待时间 IOW IO等待时间 IRQ 硬中断时间 SIRQ 软中断时间

第二组数据的含义: PID 进程id PR 优先级 CPU% 当前瞬时CPU占用率 S 进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程 #THR 程序当前所用的线程数 VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存) PCY 调度策略优先级,SP_BACKGROUND/SP_FOREGROUND UID 进程所有者的用户id

14.1 实时cpu占用

查看cpu使用情况: adb shell top | findstr pkg_name > file adb shell top | grep pkg_name > file top -m 10 -s cpu(-m显示最大数量,-s 按指定行排序)

备注: top出来的CPU计算时间 (这个进程的总cpu使用时间快照2-这个进程的总cpu使用时间快照1)/(总的cpu时间快照2-总的cpu时间快照1) dumpsysinfo的CPU计算时间 (这个进程的总cpu使用时间快照2-这个进程的总cpu使用时间快照1)/{(从开机启动到当前时间2)-(从开机启动到当前时间1)} 如果需要即时的CPU信息,TOP更准。

14.2查看内存占用

1.通过包名查看: adb shell pm list packages adb shell dumpsys meminfo com.baidu.netdisk 2.通过pid查看 adb shell dumpsys meminfo pid 查看指定程序内存使用情况: dumpsys meminfo pid,比如查看手机安装的某app,那么实际命令应该为:dumpsys meminfo 3253,如下图所示: Applications Memory Usage (kB): Uptime: 457665 Realtime: 457665 MEMINFO in pid 1642 [android.process.media] Pss Private Private Swapped Heap Heap Heap Total Dirty Clean Dirty Size Alloc Free ------ ------ ------ ------ ------ ------ ------ Native Heap 0 0 0 0 77824 46695 31128 Dalvik Heap 60696 60660 0 17484 60910 52854 8056 Dalvik Other 2276 2276 0 240 Stack 160 160 0 40 Other dev 4 0 4 0 .so mmap 1575 112 916 2560 .apk mmap 12 0 0 0 .dex mmap 592 0 592 0 .oat mmap 916 0 272 0 .art mmap 1161 772 0 296 Other mmap 102 36 32 0 Unknown 45933 45892 0 1920 TOTAL 113427 109908 1816 22540 138734 99549 39184 重点关注如下几个字段: (1)Native/Dalvik 的Heap信息 具体在上面的第一行和第二行,它分别给出的是JNI层和java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄露。 (2)Total 的PSS信息 这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占用内存比较大了 其他参数含义: dalvik : dalvik使用的内存 native : native堆上的内存,指C\C++堆的内存(android 3.0以后bitmap就是放在这儿) other : 除了dalvik和native的内存,包含C\C++非堆内存······ Pss : 该内存指将共享内存按比例分配到使用了共享内存的进程 heap alloc : 已使用的内存 heap free : 空闲的内存 share dirty : 共享,但有不能被换页出去的内存 private dirty : 非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)

使用adb shell procrank (需要手机root权限) 手机中的sh是经过精简过的,有些手机可能没有 procrank 命令,可以使用genymotion模拟器,或是自己安装procrank命令。 可以看到,在linux下表示内存的耗用情况有四种不同的表现形式: VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

VSS:VSS表示一个进程可访问的全部内存地址空间的大小。这个大小包括了进程已经申请但尚未使用的内存空间。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。 RSS:表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。 PSS:表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。这种方式表示进程的内存使用情况较准确,但当只有一个进程使用共享库时,其情况和RSS一模一样。 USS:表示一个进程本身占用的内存空间大小,不包含其它任何成分,这是表示进程内存大小的最好方式! 可以看到:VSS>=RSS>=PSS>=USS

14.3 流量统计

首先获取待测应用的userId然后获取上下行流量 adb shell dumpsys package KaTeX parse error: Expected 'EOF', got '#' at position 33: …dstr userId #?返回数据为userId= …userId/tcp_snd #返回数据单位bytes #获取上行流量 adb shell cat proc/uid_stat/$userId/tcp_rcv #返回数据单位bytes #获取下行流量


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ADB常用命令 # #adb安装及配置1 #Android #调试桥 #adb