在多个设备/模拟器连接的情况下较常用的是 -s <serial-number> 参数,serial-number是指设备的设备序列号,可以通过 adb devices 命令获取。
表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。
表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。
缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中。默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log。
4.8.1.7 打印指定日志缓冲区的大小
4.8.2 内核日志
中括号里的 [14201.684016] 代表内核开始启动后的时间,单位为秒。
4.9]输出示例:
4.9.2 查看设备电池状况- adb shell dumpsys battery
复制代码
其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 44% 的电量。
4.9.3 查看设备屏幕分辨率
该设备屏幕分辨率为 1080px * 1920px。
表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。
4.9.4 查看设备屏幕密度
该设备屏幕密度为 420dpi。
表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。
4.9.5 查看设备显示屏参数- adb shell dumpsys window displays
复制代码
输出示例:
4.9.7 查看设备IMEI输出示例:
- Phone Subscriber Info:
- Phone Type = GSM
- Device ID = 860955027785041
复制代码
而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):
- adb shell
- su
- service call iphonesubinfo 1
复制代码
4.9.8 查看设备 Android 系统版本- adb shell getprop ro.build.version.release
复制代码
在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:
输出示例:
设备的更多硬件与系统属性可以通过如下命令查看:
- adb shell cat /system/build.prop
复制代码
输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:
属性名
含义
ro.build.version.sdkSDK 版本
ro.build.version.releaseAndroid 系统版本
ro.build.version.security_patchAndroid 安全补丁程序级别
ro.product.model型号
ro.product.brand品牌
ro.product.name设备名
ro.product.board处理器型号
ro.product.cpu.abilistCPU 支持的 abi 列表[节注一]
persist.sys.isUsbOtgEnabled是否支持 OTG
dalvik.vm.heapsize每个应用程序的内存上限
ro.sf.lcd_density屏幕密度
一些小厂定制的 ROM 可能修改过 CPU 支持的 abi 列表的属性名,如果用 ro.product.cpu.abilist 属性名查找不到,可以这样试试:
- adb shell cat /system/build.prop | grep ro.product.cpu.abi
复制代码
注: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。
表示将分辨率修改为 480px * 1024px。
表示将屏幕密度修改为 160dpi。
四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。
用命令恢复不了了,毕竟关闭了 USB 调试 adb 就连接不上 Android 设备了。 去设备上手动恢复吧:「设置」-「开发者选项」-「Android 调试」。
4.10.5 修改允许/禁止访问非 SDK API禁止访问非 SDK API:
- adb shell settings delete global hidden_api_policy_pre_p_apps
- adb shell settings delete global hidden_api_policy_p_apps
复制代码
命令最后的数字的含义:
值
含义
0禁止检测非 SDK 接口的调用。该情况下,日志记录功能被禁用,并且令 strict mode API,即 detectNonSdkApiUsage() 无效。不推荐。
1仅警告——允许访问所有非 SDK 接口,但保留日志中的警告信息,可继续使用 strick mode API。
2禁止调用深灰名单和黑名单中的接口。
3禁止调用黑名单中的接口,但允许调用深灰名单中的接口。
4.10.6 修改状态栏和导航栏的显示隐藏- adb shell settings put global policy_control <key-values>
复制代码
这些键对应的值可则如下值用逗号组合:
value
含义
apps所有应用
*所有界面
package-name指定应用
-package-name排除指定应用
表示设置在所有界面下都同时隐藏状态栏和导航栏。
- adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
复制代码
截图保存到电脑:
- adb exec-out screencap -p > sc.png
复制代码
先截图保存到设备里:
- adb shell screencap -p /sdcard/sc.png
复制代码
可以使用 adb shell screencap -h 查看 screencap 命令的帮助信息,下面是两个有意义的参数及含义:
参数
含义
-p指定保存文件为 png 格式
-d display-id指定截图的显示屏编号(有多显示屏的情况下)
另外一种一行命令截图并保存到电脑的方法: Linux 和 Windows
- adb shell screencap -p | sed "s/\r$//" > sc.png
复制代码
这个方法需要用到 gnu sed 命令,在 Linux 下直接就有,在 Windows 下 Git 安装目录的 bin 文件夹下也有。如果确实找不到该命令,可以下载
sed for Windows 并将 sed.exe 所在文件夹添加到 PATH 环境变量里。
需要安装 gnu-sed,然后使用 gsed 命令:
4.11.2 录制屏幕需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
可以使用 adb shell screenrecord --help 查看 screenrecord 命令的帮助信息,下面是常见参数及含义:
参数
含义
--size WIDTHxHEIGHT视频的尺寸,比如 1280x720,默认是屏幕分辨率。
--bit-rate RATE视频的比特率,默认是 4Mbps。
--time-limit TIME录制时长,单位秒。
--verbose输出更多信息。
4.11.3 查看连接过的 WiFi 密码注:需要 root 权限。
- adb shell
- su
- date -s 20160823.131500
复制代码
此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。
4.11.7 使用 Monkey 进行压力测试简单用法:
- adb shell monkey -p <packagename> -v 500
复制代码
注:需要 root 权限。
- adb root
- adb shell svc wifi enable
复制代码
- adb root
- adb shell svc wifi disable
复制代码
如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过 adb 来完成更新。
启用 SELinux
- adb root
- adb shell setenforce 1
复制代码
启用 dm_verity
- adb root
- adb enable-verity
复制代码
Android 系统是基于 Linux 内核的,所以 Linux 里的很多命令在 Android 里也有相同或类似的实现,在 adb shell 里可以调用。本文档前面的部分内容已经用到了 adb shell 命令。
4.14.1 查看进程状态
adb shell top 后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:
参数
含义
-m最多显示多少个进程
-n刷新多少次后退出
-d刷新时间间隔(单位秒,默认值5)
-s按某列排序(可用col值:cpu, vss, rss, thr)
-t显示线程信息
-h显示帮助文档
有两种方案:
- adb shell dumpsys package <packagename> | grep userId= 如:
- adb shell dumpsys package org.mazhuang.guanggoo | grep userId=
- userId=10394
复制代码
- 通过 ps 命令找到对应进程的 pid 之后 adb shell cat /proc/<pid>/status | grep Uid 如:
- adb shell
- gemini:/ $ ps | grep org.mazhuang.guanggoo
- u0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo
- gemini:/ $ cat /proc/28635/status | grep Uid
- Uid: 10394 10394 10394 10394
- gemini:/ $
复制代码
五、致谢