1. 常用基本命令
adb devices
查看当前挂载手机设备的信息
adb root
root userdebug版本的手机。
adb remount
将 '/system' 目录改为可写入的模式,默认情况下 '/system' 部分是只读模式的。
这个命令只适用于已被 root 的设备, 即调用过 adb root之后。
注意,使用其他命令之前,最好先使用adb root和adb remount命令。
adb push test.mp4 /sdcard/
push 文件置于sdcard下
adb pull /sdcard/test.mp4 .
将手机中特定的文件pull到本地
adb shell
进入手机模式
adb shell + 其他linux命令
调用手机的一些命令,如 adb shell chmod 0777 /system/bin/test_bin
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/test.mp4
扫描/sdcard/目录下,test.mp4的metadata信息,如缩略图,时长,编码格式等信息。
adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///mnt/sdcard/
重新挂载sdcard,适用于在手机的sdcard中push了好多视频,需要显示到图库中去测试,不用在一个个去scanner了。
adb shell pkill media
杀掉进程名中带media关键字的相关进场,不需要在手机模式下: ps -df | grep mediaserver; kill -9 mediaserver进程号,这些繁琐的操作
adb shell getprop
获取手机所有的属性键值
adb shell getprop media.stagefright.extractremote
查看是否以remote的模式运行MediaExtractor,即MPEG4Extractor等解析器是否运行在media.extractor 进程中(注:android 7.0之后,将mediaserver进程拆分成mediaserver, media.extractor, media.codec等粒度更小的进程,但保留了这个键值属性,手机厂商可以选择解析运行在media.extractor还是mediaserver进场)
adb shell setprop media.stagefright.extractremote false
将media.stagefright.extractremote属性值设置为false, 保证解析器运行在mediaserver进程中。
2. 常用调试命令
adb logcat
查看手机缓冲区的ap log
adb logcat -c && adb logcat -v threadtime
清除手机缓冲区log,并实时查看ap log
adb logcat -s MediaPlayer
过滤 LOG_TAG 为 MediaPlayer的相关ap log
adb logcat | grep "MediaPlayer"
过滤log中包含"MediaPlayer"相关的ap log
adb logcat | grep -E "MediaPlayer|NuPlayer"
过滤多个关键字相关的ap log
adb shell dmesg
查看缓冲区的kernel log (只要距离开机的相对时间段, 没有时间信息,不推荐使用)
adb shell dmesg -c
查看缓冲区的kernel log并 clear
adb shell dmesg -C
清除缓冲区的kernel log, 不会显示到终端设备上
adb shell dmesg -C && adb shell dmesg -w
清除缓冲区的kernel log, 并循环调用adb shell dmesg 以便实时显示 kernel log
备注: 上述的dmesg命令不直观,不推荐使用,推荐如下用法
adb logcat -b kernel
查看kernel log
adb logcat -b kernel -c && adb logcat -v threadtime -b kernel
清除缓存的kernel log并实时查看kernel log
adb shell debuggerd -b + 进程号
查看当前指定进程的各个线程调用栈
如:
$adb shell ps -df | grep audioserver
audioserver 719 1 0 15:51:31 ? 00:00:15 android.hardware.audio@2.0-service
audioserver 919 1 0 15:51:32 ? 00:00:04 audioserver
$adb shell debuggerd -b 919 > ~/tmp.txt
3. 部分专用调试命令
adb shell dumpsys
查看手机上所有的service的运行状态(强烈不推荐这个命令,信息太多了,不好查找有用信息)
adb shell service list
查看手机上所有运行的service name(用于dumpsys后跟的参数)
我们查看了所有的service,可以一一dumpsys指定service的状态
adb shell dumpsys media.player
查看当前播放的媒体文件的状态
如 NuPlayer的state, 音视频轨所用的decoder,视频的分辨率,音频的采样率,采用位数等等
adb shell dumpsys battery
查看当前电池的状态信息,是否在充电等信息
4、放在线音乐或者视频时 抓包
adb shell tcpdump -s 0 -i wlan0 -w a.pcap
抓取wlan0网卡的数据 并写到 a.pcap文件里
根据网卡的不同 可能为p2p0等设备
使用 wireshark来查看
如果想看具体包信息 可以过滤 HTTP包 只看 HTTP最后的 HTTP/1.1 200 OK
中的conenet-Length字段 如果没有设置 前端拿到的就是 -1
5、通过wifi连接adb来查看log
此方法使用于手机的usb端口被其他设备占用的情形
5.1 查看手机ip地址
连上手机,adb shell ifconfig
找到wlan0中 inet addr: 后面的ip地址
5.2 连接端口
adb tcpip 1234
其中1234为端口号,保证没有被其他模块使用即可
5.3 连接手机
adb connect ip:port 方式
例:
adb connect 192.168.0.1:1234
注意手机和pc必须在同一个网段中
为了不用每次都敲这些命令,我做成了bash脚本,如下:
#!/bin/sh
adb root
sleep 1
addr_line=`adb shell ifconfig | grep "inet addr:.* Bcast:"`
addr=`echo ${addr_line} | sed 's/.*inet addr:\(.*\) B.*/\1/g'`
random_num=`date +%s%N`
range=$((65536 - 49152))
delta=$(( $random_num % $range))
#port=`expr 49152 + 10`
#port=$[ 49152 + 10 ]
if [ -z $1 ]; then
port=`expr 49152 + $delta`
else
port=$1
fi
echo "random_num:'$random_num',range:'$range', delta:$delta, port:'$port'"
adb tcpip ${port}
sleep 1
echo adb tcpip ${port}
#echo adb tcpio
#sudo /home/ruzhi/system-config/bin/Linux/adb connect ${addr}:${port}
adb connect ${addr}:${port}
echo adb connect ${addr}:${port}
echo ------------------------------------------
adb devices
---------------------
作者:少侠的崛起
来源:CSDN
原文:https://blog.csdn.net/u012188065/article/details/80481467
版权声明:本文为博主原创文章,转载请附上博文链接!
使用说明
使用说明:
将此段sh保存到脚本中,连接手机,
直接运行 脚本 + 指定端口号,
比如我将这段代码保存到con.sh中,运行时输入
con.sh 1234
脚本会自动搜索手机ip 地址,之后连接 1234 端口号
为了保证更高的效率,脚本后面也可以不指定端口号,即
con.sh
端口号为 49152 - 65536 之间的一个随机端口号,大部分不会被占用。
---------------------
作者:少侠的崛起
来源:CSDN
原文:https://blog.csdn.net/u012188065/article/details/80481467
版权声明:本文为博主原创文章,转载请附上博文链接!