调试相关
adb服务
开启adb服务
adb start-server
关闭adb服务
adb kill-server
adb连接
1 | adb connect 127.0.0.1:5037 |
发布端口
可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:
1 | adb forward tcp:5555 tcp:8000 |
设备
查看当前设备 cpuInfo
1 | adb shell |
打印出内核的调试信息
1 | adb shell dmesg |
列出设备(验证手机是否连上adb)
- 列出设备及其id
adb devices
- 使用特定设备操作
adb -s device_id
例如:adb -s 47db0de20304 shell
获取设备的ID和序列号
1 | adb get-product |
查看安卓版本
1 | # 获取系统版本 |
重启设备
正常重启
1 | adb reboot |
1 | 指定某台机器进行重启 |
重启到 bootloader (刷机模式)
adb reboot bootloader
重启到 recovery (恢复模式)
进入Recovery 模式可以使用组合键,也可以使用adb 命令 adb 命令进入recovery 模式如下
adb reboot recovery
1 | adb -s 真机序列号 reboot |
跳过Google 开机向导的命令
1 | adb shell pm disable com.google.android.setupwizard |
启动开机向导命令
1 | C:\Users\Administrator>adb shell am start com.google.android.setupwizard/.user.WelcomeActivity |
查看手机系统进程
列出进程列表及其pid(使用 ps 命令查看系统进程)
adb shell ps
杀死指定pid的进程
adb shell kill pid
查看指定进程信息
adb shell ps -x pid
使用Top命令查看系统进程
1 | adb shell top |
结合findstr 命令 过滤多余的信息
1 | adb shell ps | findstr qq |
查看 service
1 | adb shell service list |
查看系统当前内存使用情况
1 | adb shell cat /proc/meminfo |
查看指定包名应用内存使用情况
adb shell dumpsys meminfo package
示例:【因为命令行窗口展示不全所以打印到具体文件中】
1 | adb shell dumpsys meminfo com.xm597.app >d:meminfo.txt |
1 | Applications Memory Usage (in Kilobytes): //应用程序内存使用情况(以千字节为单位) |
内存top10【3秒刷新一次】
1 | adb shell |
示例:
1 | Tasks: 719 total, 3 running, 715 sleeping, 0 stopped, 1 zombie |
[!参数解释]
任务相关的参数
- Tasks(任务):
- Total: 表示系统中总共有多少个任务(进程)。在此例中是 719 个。
- Running: 当前正在运行的任务数量。在此例中是 3 个。
- Sleeping: 当前处于“休眠”状态的任务数量,即正在等待某些事件(如 I/O 操作)的进程。此例中是 715 个。
- Stopped: 当前被停止的任务数量。此例为 0。
- Zombie: 僵尸进程的数量。这是已经完成,但尚未被其父进程收集的进程。在此例中是 1 个。
内存使用情况参数
Mem(内存):
- Total: 总内存大小,单位为 GB(千兆字节)。在此例中是 7.4G。
- Used: 已使用的内存量。此例中是 7.1G,这表示系统内存几乎耗尽。
- Free: 当前空闲的内存,表示可以使用的内存量。此例中是 324M(兆字节)。
- Buffers: 内核用于临时保存文件的缓冲区的内存量,帮助提高 I/O 性能。在此例中是 8.9M。
Swap(交换空间):
- Total: 总交换空间的大小。此例中是 4.0G。
- Used: 已使用的交换空间。此例中是 2.2G,表明还有一部分交换空间可用。
- Free: 当前可用的交换空间。此例中是 1.7G。
- Cached: 被缓存以加速访问的数据量。此例中为 2.4G。
CPU 使用情况参数
- CPU:
- CPU%: 显示系统总的 CPU 使用情况。800%代表可以用的最大 CPU 时间(如在 8 核心的系统中,每个核心最多 100%)。
- %user: 在用户空间中运行的进程所占用的 CPU 百分比。在此例中为 9%。
- %nice: 以“好”优先级(nice priority)运行的进程占用的 CPU 百分比。在此例中为 1%。
- %sys: 内核和系统进程占用的 CPU 百分比。在此例中为 10%。
- %idle: CPU 处于空闲状态的百分比。在此例中高达 775%,这表明系统有大量空闲 CPU。
- %iowait: 进程等待 I/O 操作所占用的 CPU 百分比。此例为 0%,表示没有进程因 I/O 等待而占用 CPU。
- %irq: 硬中断占用 CPU 的百分比。在此例中为 3%。
- %sirq: 软件中断占用 CPU 的百分比。在此例中为 2%。
- %host: 此值为 0,表示没有被标记为主机进程占用。
进程相关的参数(进程列表)
每个进程的表格包含以下参数:
PID: 进程标识符。每个进程都有一个唯一的 PID。
USER: 启动该进程的用户。
PR: 进程的优先级(Priority)。数值越低优先级越高。
NI: niceness值,影响用户进程的优先级(正值降低优先级,负值提升优先级)。
VIRT: 进程所使用的虚拟内存量,包括内存使用量、交换空间、共享库等。
RES: 进程占用的实际物理内存(RAM)的量。
SHR: 进程共享的内存(如共享库)量。
S: 进程状态:
- R: 正在运行。
- S: 休眠中。
- I: 空闲。
- 其他状态也会被标记。
%CPU: 该进程所占用的 CPU 百分比。
%MEM: 该进程所占用的内存百分比。
TIME+: 进程所使用的 CPU 总时间。
ARGS: 执行该进程的命令或名称。
查看某个进程的使用情况
1 | adb shell |
-m num Maximum number of processes to display. // 最多显示多少个进程
-n num Updates to show before exiting. // 刷新次数
-d num Seconds to wait between updates. // 刷新间隔时间(默认5秒)
-s col Column to sort by (cpu,vss,rss,thr). // 按哪列排序
-t Show threads instead of processes. // 显示线程信息而不是进程
-h Display this help screen. // 显示帮助文档
Activity 调试
启动应用(adb启动Activity)
adb shell am start -n 包名/类名
adb shell am start -n your.package.name/your.package.name-activity
1 | 如:启动浏览器 |
1 | 如:找到并启动正在运行的某个activity |
启动&耗时
adb shell am start -S -W 包名/类名
-S 表示重启当前应用
展示内容解析:
ThisTime:最后一个Activity的启动耗时(例如从LaunchActivity->MainActivity【adb命令输入的Activity】,只统计MainActivity的启动耗时)
TotalTime:启动一连串的Activity的总耗时(有几个Activity就统计几个)
WaitTime:应用进程的创建过程+TotalTime
强行停止应用
adb shell am force-stop package
1 | 例子: |
查看当前所有栈列表和栈内activity
1 | adb shell dumpsys activity activities |
查看当前 Activity 名称(查看当前最上层activity)
adb shell dumpsys activity | findstr “mFocusedActivity”
获取当前运行的Activity
1 | adb shell dumpsys activity | findstr Run |
获取当前运行的Activity.bat
1 | @echo off &PUSHD %~DP0 &TITLE Settings Tool |
在 mac 中 findstr 要换成 grep
1 | adb shell dumpsys activity | grep Run |
获取当前指定包名的Activity栈
1 | adb shell "dumpsys activity|grep" 包名 |
‘grep’不是内部或外部命令,也不是可运行的程序 或批处理文件。所以加双引号
获取apk 版本号,权限等信息的方法
1 | adb shell dumpsys package com.xxx.xxx(包名) |
在低电耗模式下测试您的应用
您可以按以下步骤在低电耗模式下测试您的应用:
使用 Android 6.0(API 级别 23)或更高版本的系统映像配置硬件设备或虚拟设备。
将设备连接到开发计算机并安装您的应用。
运行您的应用并使其保持活动状态。
运行以下命令,强制系统进入闲置模式:
1
adb shell dumpsys deviceidle force-idle
准备就绪后,运行以下命令,使系统退出闲置模式:
1
adb shell dumpsys deviceidle unforce
执行以下命令,重新激活设备:
1
adb shell dumpsys battery reset
在重新激活设备后观察应用的行为。确保应用在设备退出低电耗模式时正常恢复。
在应用待机模式下测试您的应用
如需在应用待机模式下测试您的应用,请执行以下操作:
使用 Android 6.0(API 级别 23)或更高版本的系统映像配置硬件设备或虚拟设备。
将设备连接到开发计算机并安装您的应用。
运行您的应用并使其保持活动状态。
运行以下命令,强制应用进入应用待机模式:
1
2adb shell dumpsys battery unplug
adb shell am set-inactive <packageName> true使用以下命令模拟唤醒您的应用:
1
2adb shell am set-inactive <packageName> false
adb shell am get-inactive <packageName>在唤醒应用后观察它的行为。确保应用从待机模式正常恢复。您应特别检查应用的通知和后台作业是否继续按预期运行。
adb启动service
adb shell am startservice -n 包名/类名
adb shell am startservice -n {包(package)名}/{包名}.{服务(service)名称}
如:启动自己应用中一个service
adb shell am startservice -n com.android.traffic/com.android.traffic.maniservice
adb shell am startservice -n com.programandroid/.Service.BindServiceMethod
adb发送broadcast
adb shell am broadcast -a <广播动作>
adb shell am broadcast -a 广播Action
1 | 如:发送一个网络变化的广播 |
发送 intent
1 | adb shell am start -a android.intent.action.VIEW |
设备应用管理
安装apk
- 安装
adb install xxx.apk
- 覆盖安装(保留缓存和数据)
adb install -r xxx.apk
1 | adb -s 真机序列号 install **.apk |
1 | //如 |
其中 -s SD卡;-r 覆盖安装
如果只有一台真机,那么直接
adb -s install **.apk
卸载apk
- 卸载
adb uninstall package
- 卸载时保留数据和缓存目录
adb uninstall -k package
1 | adb shell pm uninstall 包名 |
查看设备应用
- 查看设备所有应用包名(查看手机中所有apk 包名)
adb shell pm list packages
- 列出指定包名对应的apk路径
adb shell pm path your.package.name
- 清空指定包名对应的应用的数据和缓存文件(清除app 数据)
adb shell pm clear your.package.name
查看已知权限组
adb shell pm list permission-groups
查看手机Feature 支持
1 | adb shell pm list features |
- 根据包名,查看apk 安装路径
1 | adb shell pm path 包名 |
多用户相关
查看支持最多用户数
adb shell pm get-max-users
查询系统所有用户
adb shell pm list users
创建新用户
adb shell pm create-user user_name
移除指定id用户
adb shell pm remove-user user_id
文件管理
查看文件
1 | adb -s 真机序列号 shell |
将电脑文件复制到设备sd卡上
1 | adb push 电脑文件路径 /sdcard |
如:
1 | adb push D:\Desktop\安装包\保意\20200302正式线替换图标\laiDianYi-release.apk sdcard |
设备文件复制到电脑上
1 | adb pull /sdcard/text.txt 电脑文件路径 |
删除
adb shell rm /sdcard/text.txt
-f 强制删除文件不需要确认
-r 递归删除文件夹内文件
-i 删除文件前需要确认
1 | //例子(%1替换为具体imei) |
创建目录
adb shell mkdir -p /sdcard/temp/test/
指定 -p 递归创建目录
创建文件
adb shell touch /sdcard/text.txt
复制文件
adb shell cp /sdcard/text.txt /sdcard/test/
移动文件
adb shell mv /sdcard/1.txt /sdcard/2.text
移动同一目录下文件相当于重命名文件
常用 ADB 命令
adb连接模拟器
1 | adb connect 127.0.0.1:5037 |
导出bug日志(anr也可以查看)
1 | //1. 生成bug日志 |
- 找到d:/com.android.shell/files/bugreports,解压zip文件,其中anr日志在zip内的FS/data/anr内
我在windows桌面新建个bat,内容是
adb bugreport
,居然直接在桌面生成了个zip文件(前提是usb连接好手机)
记录无线通讯日志
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
1 | adb shell |
查看安卓包名
法一:adb shell am monitor
然后启动需要获取包名的应用
法二:adb shell pm list packages -3
查看自己安装的 app 包名
法三:安卓系统中:设置–应用–正在运行 查看
法四:安卓系统:文件管理器访问目录/data/data 下,文件夹即为包名
法五:将 apk 反编译,查看 AndroidManifest.xml 中的 package
列出所有包名
1 | adb shell pm list packages |
另外可以加上 grep 查询词
1 | adb shell pm list packages | grep 'miui' |
查看手机上所有包名
1 | adb shell |
Linux多个命令一起执行可以用“;” 或者 “&&”进行分割
ADB 命令截屏
截屏 screencap
1 | adb shell screencap 文件保存路径 |
ADB 命令录像
录像 screenrecord
1 | adb shell screenrecord 文件保存路径 |
按 Control + C 停止屏幕录制,否则,到三分钟或 --time-limit
设置的时间限制时,录制将自动停止。
screenrecord 部分参数
选项 | 说明 |
---|---|
–size width x height | 设置分辨率 eg:1280x720 |
–bit-rate rate | 视频比特率,默认值为 4Mbps,可以设6Mbps,这样质量更好 eg:adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
–time-limit time | 设置最大录制时长(以秒为单位)。默认值和最大值均为 180(3 分钟)。 |
申请Root权限
1 | adb shell su |
非root设备通过adb命令授权应用为超级管理员
如应用“冰箱”
1 | adb shell dpm set-device-owner com.catchingnow.icebox/.receiver.DPMReceiver |
adb shell查看完毕退出
exit
或者 Ctrl + D
查看所有程序包名
1 | adb shell pm list packages |
加上grep查询词
1 | adb shell pm list packages | grep 'miui' |
查看当前图层的合成方式
1 | adb shell dumpsys SurfaceFlinger |
DEVICE:HWC合成(最多合成4个图层,多的就会标记为GPC合成。如弹多个弹窗就会多层,耗能)
CLIENT:GPU合成
关闭、开启系统升级
1 | adb shell pm disable-user com.huawei.android.hwouc |
关闭、开启快应用
1 | adb shell pm disable-user com.huawei.fastapp |
使用logcat抓 log信息
在cmd窗口输出logcat信息
1 | adb logcat |
把logcat输出到文件中
1 | adb logcat > D:\1.txt |
例子:
1 | #adb logcat -d -b system -v time >本地文件.txt |
使用 -s 过滤log标签
1 | adb logcat -s 关注log标签 |
e.g
1 | adb logcat -s AndroidRuntime |
使用 -c 清除缓存log
1 | adb logcat -c |
电量管理相关命令
模拟拔下设备电源
1 | adb shell dumpsys battery unplug |
低电量条件下的行为
1 | adb shell settings put global low_power 1 |
恢复电源修改
1 | adb shell dumpsys battery reset |
ADB相关问题
adb 识别不出的问题
问题:
1 | adb devices |
方法一:
关闭eclipse
cmd-->adb nodaemon server
找出adb端口(软件默认5037)cmd-->netstat -ano|findstr 5037
列出所有端口为5037的记录。找到本地的记录的pid任务管理器中:结束掉该pid的进程,关闭adb.exe
重启eclipse
or 命令行关闭占用端口的进程
找出adb端口(软件默认5037)
adb nodaemon server列出所有端口为5037的记录。找到本地的记录的pid
netstat -ano|findstr 5037结束进程
taskkill -f -im pid
方法二:
停止ADB服务
./adb kill-server
开启ADB 服务
./adb start-server
方法三:
插拔USB重试
手机关机重启
插上USB后,重新装一下驱动,ADB驱动
关掉电脑上360手机助手,安全卫士之类的
windows进程下关掉adb.exe; 关掉eclipse重试
输入命令:
1
2
3
4
5adb kill-service
adb start-server
adb root adb devices找到.android文件夹,在该文件夹下添加一个adb_usb.ini文件(若已存在,则直接打开修改),里面内容为0xVID号
VID号获取方法:
计算机管理 -〉设备管理 -〉android phone -> Android Composite ADB Interface ->右键属性-〉详细信息 -〉找到VID_后面的四位数字即可
设备android 5以下不能识别到的问题
- 查看开发者是否开启USB调试
- 查看是否选择了传输方式(不会主动弹出,需要去设置里找)
adb devices设备名称相同的问题
解决:
只留下一个设备
adb shell
echo 123321234 >/sys/class/android_usb/android0/iSerial
exit 推出shell模式
adb kill-server
adb start-server
adb devices
adb server is out of date
解决:
- 关闭eclipse
- cmd–>adb nodaemon server照出adb端口(软件默认5037)
- cmd–>netstat -ano|findstr 5037列出所有端口为5037的记录。找到本地的记录的pid
- 任务管理器中:结束掉该pid的进程,关闭adb.exe
- 重启eclipse
vivo手机连不上
确认开启开发者模式,开启其中的USB调试
如果没有看到有“MTP、传输照片、管理文件”的选项,windows得更新驱动
windows版本MTP驱动下载地址:
http://zs.vivo.com.cn/download.php?sel_type=2
Android Studio运行后选用了AS自带的签名文件
检查AS的Build Variants
对应渠道的Active Build Variant
(如果两个不同版本打开同一份代码会导致这个变量变掉)
改成对应渠道就是正常的签名文件了(与AS右侧Gradle--ZCZG4.0--daogou--Tasks--build--assembeZcZg
打出来的包是一样的)
grep
不是内部或外部命令,也不是可运行的程序 或批处理文件。
所以给命令加双引号
如:
1 | //获取指定包名当前的activity栈 |
安装APK时报错:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
安装APK时报错:Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
可以使用adb install -t 解决
对于已经在手机的文件可以使用pm install -t解决。
其他adb命令
adb install 一共有lrtsdg六个选项
-l 锁定该应用程序
-r 替换已存在的应用程序,也就是说强制安装
-t 允许测试包
-s 把应用程序安装到sd卡上
-d 允许进行将见状,也就是安装的比手机上带的版本低
-g 为应用程序授予所有运行时的权限
命令行启动另一个程序失败
程序中启动另一个程序:
1 | Runtime run = Runtime.getRuntime(); |
cmd启动另一个程序:
1 | Runtime run = Runtime.getRuntime(); |
CloudTest用命令行启动CloudTestWeb,启动失败
原因:类包中gson包不能export出去,一export出去那么就不能启动另一个程序CloudTestWeb
CloudTest的类包导出情况截图如下: