目录
前言:
文章,一为温故而知新,二若是可以帮助到别人,也是我的荣幸。
因本人能力有限,若有错误之处,麻烦指出。如果觉得有可取之处,麻烦点赞支持一下。 😊
1.常用的adb命令
- 重启adb
adb kill-server adb start-server
有时候adb会莫名其妙的变慢,或者没有响应,可以考虑重启adb服务,实在还不行,可以考虑重启电脑 - adb usb 重启usb
-
日志
adb logcat -c 清除之前的日志
adb logcat >log.txt 输出日志到当前目录下
adb logcat >C:\Users\LEGION\Desktop\log_record\0714\1446.txt 输出日志到指定目录下
adb logcat -s Tag 过滤指定Tag的日志
adb logcat -s Tag Tag 过滤多个Tag
adb logcat *:E 过滤Error级别的日志
-
文件操作
adb pull /data/anr/traces.txt E:/ 下拉文件到指定路径
adb push /sdcard/ 上传文件到指定目录下
2.Linux命令
- am命令
am命令调用的是ActivityManagerService
am start -a action 启动activity
am start -a action --es website gityuan.com (--es website gityuan.com代表intent.putExtra("website","gityuan,com"),--es代表string类型,其他类型自行查找吧。)
am start -n com.gityuan.app/.MainActivity 通过包名/类名启动activity
am startservice -a action 通过action启动service
am force-stop <packageName(包名)> 强杀进程
am restart <packageName(包名)>
- pm命令
pm命令调用的是PackageManagerService
pm list packages 设备上安装的app的包名
pm install [options] <path> 安装应用-r: 覆盖安装已存在Apk,并保持原有数据;-d: 运行安装低版本Apk;-t: 运行安装测试Apk;-g: 准许Apk manifest中的所有权限;
pm uninstall <packageName> 删除应用
pm enable <packageName> 解禁应用
pm diabale <packageName> 禁用应用
pm path <packageName> 查看app路径
pm clear <packageName> 清除应用缓存
- 文件操作
touch New_file 创建新文件
cp /data/anr/traces.txt /sdcard/ 将文件复制到其他目录下 cp source destination
mv /data/anr/traces.txt /sdcard/ 将文件移动到其他目录下 mv source destination
rm -rf New_file 删除文件且不再次确认
mkdir New_dir 创建新文件夹
mkdir -p New_Dir/Sub_Dir/Under_Dir 创建多个目录和子目录
rmdir New_dir 删除文件夹
file New_file 查看文件类型
cat -n New_file 查看文件内容并加上行号 - adb shell rm -rf data/* 删除目录下的所有文件
-
adb shell rm -rf data/ 删除目录及目录下的所有文件
- 进程
ps -A 查看所有进程
ps -ef 查看所有进程并展示相关信息
kill PID 终止进程 PID:process ID 进程号
- 磁盘
df -h 展示磁盘的使用情况
du 当前目录下所有的文件、目录和子目录的磁盘使用情况,它会以磁盘块为单位来表明每个文件或目录占用了多大存储空间
- ls的使用
ls -lsh 查看当前目录下的文件及其文件夹并展示大小
ls -a 展示隐藏文件
ls -F 区分文件及目录
3.组合命令
- 每个命令之间用;隔开。 各命令的执行结果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。
adb logcat -c;adb logcat -s OkHttp 先清除之前的日志(有时候会清除不成功,可以多执行几次),然后再过滤OkHttp这个Tag的日志
-
每个命令之间用&&隔开。 若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
cd /data/anr/&&cat traces.txt
-
每个命令之间用||或者|隔开。 ||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功。
在命令行中,我们用|表示管道,管道可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。
dumpsys package <packageName> | grep version ,其中packageName代表包名,该命令的含义是获取该应用中含有version的信息
4.其他好用的命令
- 获取屏幕当前显示activity
dumpsys window | grep mCurrentFocus
-
查看activity栈的信息
dumpsys activity -
录屏
录制屏幕 adb shell screenrecord --time-limit=180 --size 1920x1080 /sdcard/demo.mp4
从sdcard中取出 adb pull /sdcard/demo.mp4 -
截屏
保存到SDCard
adb shell /system/bin/screencap -p /sdcard/screenshot.png
从SD卡导出到电脑
adb pull /sdcard/screenshot.png E:\screenshot(保存到电脑) -
CPU占有率前5
adb shell top -m 5 -
查看线程的CPU和内存使用情况
adb shell top -H
有些版本是adb shell top -t -
CPU数目查询
adb shell
cd /sys/devices/system/cpu/
ls -
内存使用率
adb shell dumpsys meminfo -s 进程号
adb shell dumpsys meminfo 包名 -
cpu信息
(这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息,这个目录的内容不在硬盘上而是在内存里)
adb shell cat /proc/cpuinfo
adb shell cat /proc/stat
adb shell dumpsys cpuinfo -
获取当前启动的应用的activity的信息
adb logcat -s ActivityManager -
mac获取
/sys/class/net/eth0 cat address
ifconfig
5.调式小技巧
- 应用anr了,但日志找不到对应的log咋办?
可以到data/anr/目录下,找到相应时间的traces.txt文件,查看主线程卡在了那里。
- 子线程代码没有执行,或者线程卡死,该怎么定位问题?
adb kill -3 <PID>,执行该命令,会在data/anr/目录下,生成对应traces.txt。有时候traces.txt文件无法覆盖,可以先删除之前的traces.txt,然后再kill,kill的时候可以适当多kill几次。
有些机器,无法直接下拉data/anr/目录下的文件,可以先把文件移动到sdcard目录下,然后再下拉,然后直接移动到usb设备。
查看traces.txt文件时,一定要先看是否是对应的进程,不要问我,为什么要加上这一句。
- 应用莫名崩溃,但是找不到对应的崩溃信息?
可以到data/timbstones目录下,寻找对应时间的timbstones文件,该文件会记录系统内核崩溃对应的日志信息。
- 如何快速给文件改名?
mv New_file.txt Rename_file.txt