ADB常用命令【转】
转载链接:https://blog.csdn.net/u014589884/article/details/120113281
ADB常用命令
android
一、 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 #获取下行流量
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/16407690.html